在单独的线程上的GUI对话框

时间:2012-09-23 23:41:43

标签: wxwidgets

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

我做了一个小测试,似乎有效,但会出现警告:

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

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

谢谢, 基督教

2 个答案:

答案 0 :(得分:1)

您只需要在CoInitialize()中使用COM调用each thread。因此,在创建公共对话框对象之前,只需调用CoInitialize()(每个线程一个)并在线程调用CoUninitialize()结束时调用。

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

答案 1 :(得分:1)

是的,有'异议'

  

多线程应用程序的重要说明

     

编写多线程应用程序时,强烈建议使用   没有辅助线程调用GUI函数。

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