我有一个WPF应用程序,其中包含许多子控件。
其中一个控件托管第三方库,它在底层运行一些本机代码,这些代码会引发访问冲突并导致应用程序崩溃。不幸的是,删除库不是一种选择。
我想做的是启动一个新的Windows进程,在其中托管第三方库,并以某种方式与之通信。与Google Chrome和IE8处理浏览器插件的方式大致相同。
问题是第三方库需要绘制到屏幕上,所以我必须以某种方式在WPF应用程序的主窗口中具有相当于HTML的iframe。
我不知道如何开始这一点,到目前为止,谷歌难以证明这一点。非常感谢任何建议。
答案 0 :(得分:4)
这是一个艰难的,但幸运的是你最近在这个领域做了一些工作。
您是否听说过.NET 3.5中的System.Addin命名空间?在这种情况下它可能会有所帮助。它允许将控件加载到单独的AppDomain中,但显示在同一UI中。我想你必须做一些工作才能让一切正常通信(以前从未这样做过),但这是可能的。
从加载项小组看一下这篇早期帖子:http://blogs.msdn.com/clraddins/archive/2007/08/06/appdomain-isolated-wpf-add-ins-jesse-kaplan.aspx
似乎他们将样本和帮助代码保存在codeplex上:http://clraddins.codeplex.com/
我对此非常感兴趣,所以如果你有这个工作,请告诉我们这是怎么回事!
答案 1 :(得分:0)
可能不是最简单的任务。您是否考虑过在单独的App-Domain中托管您的第三方内容?通过这种方式,您还可以获得良好的隔离度,同时为您节省另一个项目的麻烦。是否必须不断刷新,还是可以在应用程序中的预定义点刷新?也许某些方案你基本上可以截取第三方输出并在原始应用中将其显示为图像...
答案 2 :(得分:0)
迟到了。如果你仍然需要这个,你看过这个项目:http://blogs.msdn.com/b/changov/archive/2009/10/26/hosting-wpf-ui-cross-thread-and-cross-process.aspx
我在LOB应用中的多个外部进程中运行多个插件。我的框架源自上面的项目。