最近做一个程序,CFromView的单文档工程,使用一条worker线程遍历文件夹,找到需要的文件就把信息输到一个主窗口的CListCtrl里面,但是问题出现了:无论我在线程参数里面传CListCtrl的指针还是主窗口句柄,都没办法完成和UI的通讯.程序界面会死掉,部分代码如下:线程参数定义为:
typedef struct _THREAD_PARAM
{
HWND m_hWnd; //CListCtrl所在的父窗口句柄
TCHAR *m_Path; //欲遍历的文件夹
}线程代码如下: ::SetCurrentDirectory(pThreadParam->m_szPath);
bWorking = finder.FindFile("*.zip", 0);
while(bWorking){
bWorking = finder.FindNextFile(); HUNZIP huz;
ZIPENTRY ze;
strcpy(ze.Name, "test.xml");
memset(szFileName, 0x00, MAX_PATH);
sprintf(szFileName, "%d", i);
strPath = finder.GetFilePath();
UnzipOpenFile(&huz, strPath.GetBuffer(0), 0);
UnzipFindItem(huz, &ze, 0);
memset(szFileName, 0x00, MAX_PATH);
sprintf(szFileName, "%d.xml", i);
UnzipItemToFile(huz, finder.GetFileName()+".xml", &ze);
UnzipClose(huz);
::SendMessage(pThreadParam->m_hWnd, WM_UNZIPFINISHED, (WPARAM)i, (LPARAM)szFileName);
i++;
}
请各位帮帮忙,分不够可以再加.
typedef struct _THREAD_PARAM
{
HWND m_hWnd; //CListCtrl所在的父窗口句柄
TCHAR *m_Path; //欲遍历的文件夹
}线程代码如下: ::SetCurrentDirectory(pThreadParam->m_szPath);
bWorking = finder.FindFile("*.zip", 0);
while(bWorking){
bWorking = finder.FindNextFile(); HUNZIP huz;
ZIPENTRY ze;
strcpy(ze.Name, "test.xml");
memset(szFileName, 0x00, MAX_PATH);
sprintf(szFileName, "%d", i);
strPath = finder.GetFilePath();
UnzipOpenFile(&huz, strPath.GetBuffer(0), 0);
UnzipFindItem(huz, &ze, 0);
memset(szFileName, 0x00, MAX_PATH);
sprintf(szFileName, "%d.xml", i);
UnzipItemToFile(huz, finder.GetFileName()+".xml", &ze);
UnzipClose(huz);
::SendMessage(pThreadParam->m_hWnd, WM_UNZIPFINISHED, (WPARAM)i, (LPARAM)szFileName);
i++;
}
请各位帮帮忙,分不够可以再加.
这样看上去似乎没问题```程序是公司产品吗?大吗?方便的话传给我帮你调`
用SendMessageTimeOut
参见http://www.microsoft.com/downloads/details.aspx?FamilyID=b17f819f-f5ec-4e7e-865e-fb9899908aeb&displaylang=en