2010-05-29 56 views
3

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

我想加载他们在他们自己的应用程序域,但不认为这是可能的,因为GUI。 我也想监视他们,告诉他们是否没有响应并卸载它们。

这可能吗? 如果我升级到WPF是更简单的事情。

+0

您可以详细了解您定义为无响应的内容。如果插件在主应用程序线程上“执行”,那么根据定义,您的整个应用程序将无响应。什么是插件? – 2010-05-29 19:21:36

+0

基本上,如果一个插件写得不好,或者加载时遇到问题,我想知道,下次不加载。 – Telavian 2010-05-31 01:18:02

回答

1

如果您允许插件创建自己的WinForms UI控件,它们将不得不在与主UI相同的线程上运行,因此您无法在自己的AppDomain中分离插件。

你可以做的是在主机和插件之间定义一个非UI抽象层,这样插件只能向主机发送他们需要什么类型的UI的消息。主机然后负责创建UI控件并将插入的输入继电器。这使得插件实例能够存在于独立的appdomain中。

更新:与WPF和System.AddIn(又名MAF)it is possible做UI交叉的应用程序域。在去那条路线之前,我会阅读some opinions on MAF

+0

不,对于WPF来说不是这样。 http://blogs.msdn.com/b/clraddins/archive/2007/08/06/appdomain-isolated-wpf-add-ins-jesse-kaplan.aspx – 2010-05-30 00:25:46

+0

@李丽:谢谢你们的支持! – 2010-05-30 12:18:31