你好,来自 StackOverflow 的同事们!
我会尽量简短,所以我会切入正题:
我在 Windows XP 上工作,在 C++ 中,使用纯 Win32 创建一个对话框。
该对话框有一些编辑控件和确定按钮,按下时会激活一个线程。
然后,Thread 从编辑控件中收集文本,并使用 OLE 自动化将它们写入 MS Word 文档。
一切正常,当我按下 OK 按钮并等待线程显示填充的 Word 文档时。
但是,当我按下 OK 按钮然后关闭对话框时,当线程处于工作中间时,会弹出一个空白 Word 文档。
为了进一步说明我的问题,这里有一些代码片段:
这是线程函数的片段:
DWORD WINAPI TabelaSvihObjekata( LPVOID hWnd ) // hWnd is handle of the Dialog box
{
// obtain dialogs window handle
HWND hwnd = (HWND)hWnd;
// Initialize COM for this thread...
CoInitialize(NULL);
// Get CLSID for our server...
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L"Word.Application", &clsid);
// do other Automation stuff and clean afterwards
}
在对话框中,这是按钮处理程序的片段:
case IDOK:
{
// create thread
DWORD threadID;
HANDLE threadHandle = CreateThread( NULL , 0 ,
(LPTHREAD_START_ROUTINE)TabelaSvihObjekata ,
(void*)hwnd , 0 , &threadID );
if( !threadHandle )
{
MessageBox( hwnd, L"Error", L"Error", MB_ICONERROR );
EndDialog( hwnd, IDCANCEL );
}
CloseHandle( threadHandle );
}
这是有问题的处理程序:
case IDCANCEL:
EndDialog(hwnd, IDCANCEL);
break;
我在 MSDN 上寻找线索,发现只有 ExitThread 作为解决方案,但由于我对线程没有经验,所以我不知道如何正确使用它。
浏览 SO 存档,我在 C# 中找到了一些示例,人们在其中引入布尔变量并在 while 循环中测试它的值,因此他们可以确定是中止线程还是让它工作。建议另一种方式,将线程放置在单独的进程,然后杀死。
我的问题是:
我应该添加或更改什么,所以当我关闭对话框时,Word 应用程序会随着线程破坏一起关闭?
如果还有什么我可以帮助的,请提出,我会很乐意这样做。
感谢所有试图提供帮助的人。