2012-09-23 54 views
0

在单独的线程上运行wxWidget的常用对话框时是否有任何对象?我正在开发一个浏览器插件,因此我需要在主浏览器线程之外进行冗长的操作。单独线程上的GUI对话框

我做了一个小测试,它似乎工作,但会出现一个警告:

.... \ SRC \ MSW \ dirdlg.cpp(333): 'CoCreateInstance的(CLSID_FileOpenDialog)' 失败,错误0x800401f0( coInitialize尚未被调用。)。

这是否意味着我必须调用wxApp :: Initialize(...)或一些其他函数?

感谢, 基督教

回答

1

你只需要你在哪里使用COM调用CoInitialize()each thread。因此,在创建通用对话框对象之前,只需调用CoInitialize()(每个线程一个)并在线程调用CoUninitialize()的末尾。

对于主线程wxWidgets在内部执行此操作。对于其他线程,您需要手动调用这些函数。它通常与GUI无关,但与wxWidgets在内部使用的COM对象相关。

+0

感谢您的快速回复。你能否告诉在单独的线程上运行wxWidget对话框是否存在异议? – chhenning

1

是的,有“反对”

重要注意事项为多线程应用

在编写多线程应用程序,强烈建议 不进行辅助线程调用GUI功能。

http://docs.wxwidgets.org/trunk/overview_thread.html

+0

好吧,我明白了。我只打算在单独的线程上显示一些基本对话框。这似乎工作。 GUI本身不会是多线程的。 – chhenning

+0

我不确定你得到它。一些本机对话框可能在MSW下运行,但并不是所有的都可以。而且我确信没有任何一个可以在其他平台下工作。 “似乎有效”并不是确定多线程程序正确性的好标准。 –

+0

官方论坛上有一个多线程GUI应用程序的示例。可能是这个话题:http://forums.wxwidgets.org/viewtopic.php?t=8392。 –