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
THX IN ADVANCE!!!!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; }




Reply With Quote