我得到了一个在另一个应用程序中作为进程外插件运行的dll。插件中的Windows窗体
当主应用程序调用我的插件时,我的代码在我的插件的appdomain内的线程池线程(我认为)中运行。这是一个MTA线程。
我的问题是什么是在我的插件中显示消息框/对话框的正确方法?
我发现的大多数答案只是说对话框应该在“GUI线程”中打开,但我的appdomain中没有GUI线程!试图寻找GUI线程的定义,但找不到任何东西。一些提示说这是执行Application.Run
的线程。
我试过的只是创建一个STA线程并在那里打开消息框/对话框。它似乎大部分时间工作,但偶尔在ShowDialog
方法内我得到一个奇怪的100%CPU使用率。
我应该在自己的应用程序域中开始与Application.Run
的消息循环吗?它应该在回调期间运行,还是创建/拆卸开销很大,因此我应该在开始时创建并始终运行它?
(我有机会到我作为家长/所有者使用主应用程序的窗口句柄)
您插入的appliaction是否提供API来显示对话框? – CodeCaster
@CodeCaster,不幸的不是。 – adrianm
我认为'ShowDialog'不是你的DLL工作。您可以提供一个可以通过调用应用程序显示的消息(例如函数返回值)。或创建可通过调用应用程序连线的事件 – Fabio