C# WinForm插件系统

C# WinForm插件系统,c#,.net,wpf,plugins,C#,.net,Wpf,Plugins,我创建了一个c#2.0 WinForm应用程序,它加载DLL,搜索接口,然后将接口作为插件加载。我将插件加载到与主应用程序相同的appdomain中,因为它们有一个GUI,我将它作为选项卡项直接加载到应用程序中 我想在他们自己的应用程序域中加载它们,但不认为这是可能的,因为GUI。 我还想监控它们,判断它们是否没有响应,然后卸载它们 这可能吗? 如果我升级到WPF,事情就简单多了。如果您允许插件创建自己的WinForms UI控件,它们将必须在与主UI相同的线程上运行,因此您无法将插件隔离在自己

我创建了一个c#2.0 WinForm应用程序,它加载DLL,搜索接口,然后将接口作为插件加载。我将插件加载到与主应用程序相同的appdomain中,因为它们有一个GUI,我将它作为选项卡项直接加载到应用程序中

我想在他们自己的应用程序域中加载它们,但不认为这是可能的,因为GUI。 我还想监控它们,判断它们是否没有响应,然后卸载它们

这可能吗?
如果我升级到WPF,事情就简单多了。

如果您允许插件创建自己的WinForms UI控件,它们将必须在与主UI相同的线程上运行,因此您无法将插件隔离在自己的appdomain中

您可以做的是在主机和插件之间定义一个非UI抽象层,以便插件只向主机发送它们需要的UI类型的消息。然后,主机负责创建UI控件并将输入中继到插件。这使插件实例能够位于单独的appdomain中


更新:使用WPF和System.AddIn(又名MAF)跨应用程序域执行UI。在走那条路线之前,我会仔细阅读。

你能更详细地解释一下什么是无反应吗。如果插件在主应用程序线程上“执行”,那么根据定义,整个应用程序将没有响应。插件在做什么?基本上,如果一个插件写得不好或者加载有问题,我想知道,下次不要加载它。不,WPF不是这样的。