2012-09-23 92 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。 –