【发布时间】:2015-11-04 18:38:16
【问题描述】:
我有一个 dll,它在另一个应用程序中作为进程外插件运行。
当主应用程序调用我的插件时,我的代码在插件的 appdomain 内的线程池线程(我认为)中运行。这是一个 MTA 线程。
我的问题是在我的插件中显示消息框/对话框的正确方法是什么?
我发现的大多数答案只说对话框应该在“GUI 线程”中打开,但我的 appdomain 中没有 GUI 线程!尝试搜索 GUI 线程的定义,但找不到任何东西。一些提示说它是执行Application.Run 的线程。
我尝试的是创建一个 STA 线程并在那里打开消息框/对话框。它似乎大部分时间都在工作,但偶尔我会在 ShowDialog 方法中得到一个奇怪的 100% CPU 使用率。
我应该在我自己的 appdomain 中使用Application.Run 开始一个消息循环吗?它应该只在回调期间运行,还是创建/拆卸成本很高,所以我应该在开始时创建它并让它一直运行?
(我可以访问我用作父/所有者的主应用程序的窗口句柄)
【问题讨论】:
-
您插入的应用程序不提供 API 来显示对话框吗?
-
@CodeCaster,很遗憾没有。
-
我认为
ShowDialog不是你的 dll 工作。您可以提供可以通过调用应用程序显示的消息(例如函数返回值)。或者创建可以通过调用应用程序连接的事件 -
@adrianm 我同意上面的 Fabio ...有效地提供允许对话交互的 API。