我喜欢 TaskDialogs 并且经常使用它们,但是我在 Windows Form 类之外调用它们时遇到了麻烦。
在 Winforms 类中,可以像这样简单地调用它们:
new Microsoft.WindowsAPICodePack.Dialogs.TaskDialog().Show();
因此,如果在运行我的应用程序时抛出任何异常,为了显示一般错误消息,我将同一行写入 static Program.Main()
:
try
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
catch (Exception exception)
{
// TODO: Show error message here
new Microsoft.WindowsAPICodePack.Dialogs.TaskDialog().Show();
}
但是当应该显示这个对话框时,我得到一个NotSupportedException
at .Show()
:
TaskDialog 功能需要加载 comctl32.dll 的版本 6,但当前在内存中加载了不同的版本。
app.manifest
将版本定义assemblyIdentity
为 6.0 包含在项目文件中。
我做了一些研究,发现 TaskDialog 可能需要一个ApplicationContext
,但我不知道如何将非Windows.Form
对象传递给它。
我该如何解决这个问题?感谢您的任何建议!
(关于TaskDialog的常见问题,我在不同的NuGet版本上进行了测试,WindowsAPICodePack
结果相同。为了最好的重现:Install-Package WindowsAPICodePack-Core
和Shell
。问候)