Windows窗体插件

本文关键字:插件 窗体 Windows | 更新日期: 2023-09-27 17:51:08

我发现一个dll在另一个应用程序中作为进程外插件运行。

当主应用程序调用到我的插件我的代码运行在线程池线程(我认为)在我的插件的appdomain。这是一个MTA线程

我的问题是在我的插件中显示消息框/对话框的正确方法是什么?

我发现的大多数答案只说对话框应该在"GUI线程"中打开,但我在我的应用域中没有GUI线程!尝试搜索gui线程的定义,但找不到任何东西。有些提示说这是执行Application.Run的线程。

我所尝试的是创建一个sta线程并在那里打开消息框/对话框。这似乎工作的大多数时间,但偶尔我得到一个奇怪的100%的CPU使用率在ShowDialog方法。

我应该在我自己的应用域中用Application.Run开始一个消息循环吗?它应该只在回调期间运行,还是创建/拆除成本很高,所以我应该在开始时创建它,并让它一直运行?

(我可以访问主应用程序的窗口句柄,我使用它作为父/所有者)

Windows窗体插件

尝试使用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/