我得到了一個在另一個應用程序中作爲進程外插件運行的dll。插件中的Windows窗體
當主應用程序調用我的插件時,我的代碼在我的插件的appdomain內的線程池線程(我認爲)中運行。這是一個MTA線程。
我的問題是什麼是在我的插件中顯示消息框/對話框的正確方法?
我發現的大多數答案只是說對話框應該在「GUI線程」中打開,但我的appdomain中沒有GUI線程!試圖尋找GUI線程的定義,但找不到任何東西。一些提示說這是執行Application.Run
的線程。
我試過的只是創建一個STA線程並在那裏打開消息框/對話框。它似乎大部分時間工作,但偶爾在ShowDialog
方法內我得到一個奇怪的100%CPU使用率。
我應該在自己的應用程序域中開始與Application.Run
的消息循環嗎?它應該在回調期間運行,還是創建/拆卸開銷很大,因此我應該在開始時創建並始終運行它?
(我有機會到我作爲家長/所有者使用主應用程序的窗口句柄)
您插入的appliaction是否提供API來顯示對話框? – CodeCaster
@CodeCaster,不幸的不是。 – adrianm
我認爲'ShowDialog'不是你的DLL工作。您可以提供一個可以通過調用應用程序顯示的消息(例如函數返回值)。或創建可通過調用應用程序連線的事件 – Fabio