Windows窗体插件
本文关键字:插件 窗体 Windows | 更新日期: 2023-09-27 17:51:08
我发现一个dll在另一个应用程序中作为进程外插件运行。
当主应用程序调用到我的插件我的代码运行在线程池线程(我认为)在我的插件的appdomain。这是一个MTA线程
我的问题是在我的插件中显示消息框/对话框的正确方法是什么?
我发现的大多数答案只说对话框应该在"GUI线程"中打开,但我在我的应用域中没有GUI线程!尝试搜索gui线程的定义,但找不到任何东西。有些提示说这是执行Application.Run
的线程。
我所尝试的是创建一个sta线程并在那里打开消息框/对话框。这似乎工作的大多数时间,但偶尔我得到一个奇怪的100%的CPU使用率在ShowDialog
方法。
我应该在我自己的应用域中用Application.Run
开始一个消息循环吗?它应该只在回调期间运行,还是创建/拆除成本很高,所以我应该在开始时创建它,并让它一直运行?
(我可以访问主应用程序的窗口句柄,我使用它作为父/所有者)
尝试使用Win API原生方法:
/// Direct Task Dialog call.
[DllImport("comctl32.dll", CharSet = CharSet.Unicode, EntryPoint = "TaskDialog")]
public static extern int TaskDialog(IntPtr hWndParent, IntPtr hInstance,
string pszWindowTitle, string pszMainInstruction, string pszContent,
int dwCommonButtons, IntPtr pszIcon, out int pnButton);
你可以在这里找到一个很好的例子:https://code.google.com/p/cassini/