CopyFileEx Doesnt return until it completes which made me think that i need to create a thread to allow posting the progress but when i use a thread

the UpdateData(FALSE); crashes the app

Anyadvice about whats wrong?

this is the code:

Struct to pass parameter to the thread
Code:
typedef struct tagTHREADPARAMS {
    LPVOID pThis;
    char Src[260];
    char Dst[260];
} THREADPARAMS;

CODE
Code:
void CProgressFCopyDlg::OnButton1(){
    THREADPARAMS ParamsPtr;
	//Asignamos los Argumentos
    ParamsPtr.pThis=this;
	strcpy(ParamsPtr.Src,"F:\\GRID 2008-08-20 09-39-52-93C.avi");
	strcpy(ParamsPtr.Dst,"C:\\GRID 2008-08-20 09-39-52-93C.avi");
	//Creamos el Thread
	DWORD ThreadID;
	CreateThread(NULL,0,CopyFileProg,&ParamsPtr,0,&ThreadID);
	if(ThreadID==0){
	   MessageBox("Error Creating Thread","Error");
	}

}

DWORD WINAPI CopyFileProg(LPVOID lpParam){
      THREADPARAMS* ParamsPtr = (THREADPARAMS*)lpParam;

      CopyFileEx(ParamsPtr->Src,ParamsPtr->Dst,CopyProgressRoutine,ParamsPtr->pThis,NULL,0x00000001); //0x00000001 = COPY_FILE_FAIL_IF_EXISTS

	  return 0;
}


DWORD CALLBACK CopyProgressRoutine(LARGE_INTEGER TotalFileSize,LARGE_INTEGER TotalBytesTransferred,LARGE_INTEGER StreamSize,LARGE_INTEGER StreamBytesTransferred,DWORD dwStreamNumber,DWORD dwCallbackReason,HANDLE hSourceFile,HANDLE hDestinationFile,LPVOID lpData){
char B[50];
CProgressFCopyDlg* DlgPtr = (CProgressFCopyDlg*)lpData;

//Copied
formatn(TotalBytesTransferred.QuadPart,B);
DlgPtr->m_Copied=CString(B);

//Total
formatn(TotalFileSize.QuadPart,B);
DlgPtr->m_Total=CString(B);

//ProgressBar
DWORD ProgP=(TotalBytesTransferred.QuadPart / TotalFileSize.QuadPart)*100;
DlgPtr->m_ProgBar.SetPos(ProgP);

DlgPtr->UpdateData(FALSE); //THIS GIVES THE CRASH

return 0;

}
THX IN ADVANCE!!!!