gpt4 book ai didi

c# - 插件中的 Windows 窗体

转载 作者:行者123 更新时间:2023-11-30 17:43:41 25 4
gpt4 key购买 nike

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

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

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

我找到的大多数答案只说对话框应该在“GUI 线程”中打开,但我的应用程序域中没有 GUI 线程!尝试搜索 GUI 线程的定义,但找不到任何内容。一些提示说它是执行 Application.Run 的线程。

我尝试的是只创建一个 STA 线程并在那里打开消息框/对话框。它似乎大部分时间都有效,但偶尔我会在 ShowDialog 方法中得到一个奇怪的 100% CPU 使用率。

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

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

最佳答案

尝试使用 Win API NativeMethods:

///直接任务对话框调用。
[DllImport("comctl32.dll", CharSet = CharSet.Unicode, EntryPoint = "TaskDialog")]
public static extern int TaskDialog(IntPtr hWndParent, IntPtr hInstance,
字符串 pszWindowTitle,字符串 pszMainInstruction,字符串 pszContent,
int dwCommonButtons, IntPtr pszIcon, out int pnButton);

您可以在这里找到很好的使用示例: https://code.google.com/p/cassini/

关于c# - 插件中的 Windows 窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com