我目前有一个使用基本外接程序模型的插件。 (使用共享库中定义的接口并使用Activator.CreateInstance创建插件的实例)但不确定如何处理它以确保所有打开的服务调用都已关闭。目前,如果我点击插件上的关闭按钮,我会调用
base.Dispose(true);
关于用户控件。现在虽然这使得插件被托管的窗口消失了但我注意到我的服务调用继续进行并返回到代码中,就好像服务没有被正确处理一样。
是否有正确的方法来处理插件,确保所有服务电话等都被处理掉?
答案 0 :(得分:2)
如果不确切知道您在这里使用的“插件”类型,请参阅以下几点:
这是AppDomain边界增加价值的另一种方式:它可以让您回收系统资源而无需循环流程。 如果主机想立即关闭加载项,则不必担心跟踪哪个加载项属于哪个AppDomain。 .NET应用程序可扩展性,MSDN杂志
自撰写该文章以来,Microsoft创建了托管加载框架(MAF)。 MAF支持 AppDomains 。
您还可以使用异步服务方法,使其更容易取消
编辑:AppDomains上的圣经;如何使用它;如何在另一个AppDomain中创建对象并与其进行通信可在此MSDN文章中找到 Discover Techniques for Safely Hosting Untrusted Add-Ins with the .NET Framework 2.0, MSDN Magazine, November 2005
MS从他们的网站上删除了旧的MSDN Mag直观文章。
注意:2008年及以前的问题仅作为.chm文件提供。在大多数Windows版本中,您必须先将这些文件保存到本地计算机,然后取消阻止该文件以进行读取。要取消阻止文件,请右键单击该文件,然后选择属性,然后选择“取消阻止”按钮。然后,内容将可供阅读 - Tell me more