日期:2014-05-20  浏览次数:20999 次

WPF Add-in 的一个大 BUG!!!!?
由于WPF先天的限制,没有办法将某个应用程序域(AppDomain)生成的WPF对象传递到另外一个应用程序域,
必须通过FrameworkElementAdapters的两个静态方法(ViewToContractAdapter和ContractToViewAdapter)。

当要将某个应用程序域生成的WPF对象传递到另外一个应用程序域之前,
需要把FrameworkElement类型的WPF对象转换为INativeHandleContract才能传递过去,
 FrameworkElementAdapters.ViewToContractAdapter(FrameworkElement类型的对象)
另外一个应用程序在取到INativeHandleContract对象后,
需要把INativeHandleContract对象转换回FrameworkElement类型的对象后才能使用(进行显示)。
 FrameworkElementAdapters.ContractToViewAdapter(INativeHandleContract类型的对象)
通过这种方法,可以解决在两个应用程序域之间传递WPF对象的问题。

具体的例子可以参照微软给出的两个例子。
例子1(英文)
 How to: Create an Add-In That Returns a UI
 http://msdn.microsoft.com/en-us/library/bb909849.aspx
例子2(英文)
 How to: Create an Add-In That Is a UI
 http://msdn.microsoft.com/en-us/library/bb909887.aspx

我按照上面给出的例子把程序做出来运行之后,咋看一下好像没有什么问题,
但是当我在不关闭应用程序的情况下不断的加载新的外接程序,
加载到一定的次数之后程序出现 【Exception from HRESULT: 0x88980406】异常。

我使用的环境如下:
 Visual Studio Team System 2008 Version 9.0.21022.8 RTM
 Windows Vista Ultimate with Service Pack 1

另,CLR Add-in Team 给出的例子也有问题。
 http://blogs.msdn.com/clraddins/archive/2007/08/06/appdomain-isolated-wpf-add-ins-jesse-kaplan.aspx(例子说明)
 http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=clraddins&ReleaseId=9454(.NET 3.5 源程序)
再现方法:不停的选择或取消某个外接程序对应的菜单选项以对外接程序进行加载或卸载。

感觉Add-in框架好像不是很稳定的样子……难道仅仅是因为我环境的问题?

------解决方案--------------------

------解决方案--------------------