创建在外部进程中运行的WPF“控件”

问题描述 投票:1回答:3

我有一个WPF应用,其中包含许多子控件。

这些控件之一托管了一个第三方库,该库在幕后运行了一些本机代码,这会引发访问冲突并导致应用程序崩溃。不幸的是,删除库不是一个选择。

我想做的是启动一个新的Windows进程,在其中托管第三方库,并以某种方式与之通信。与Google Chrome和IE8处理浏览器插件的方式大致相同。

问题是第三方库需要绘制到屏幕上,所以我必须在WPF应用程序的主窗口中以某种方式具有等效于HTML iframe的位置。

我不确定该如何开始,到目前为止,谷歌已经证明很难。任何建议都将不胜感激。

c# wpf appdomain external-process
3个回答
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/

我对此非常感兴趣,因此,如果您能正常工作,请告诉我们您的工作情况!


0
投票

可能不是最简单的任务。您是否考虑过将第三方的内容托管在单独的App-Domain中?这样一来,您还可以获得良好的隔离度,同时又可以避免其他项目的麻烦。是否必须不断刷新,还是可以在应用程序中的预定义点刷新?也许您基本上可以对第三方输出进行屏幕截图并将其显示为原始应用程序中的图像的某种方案……


0
投票

迟到了。如果仍然需要此功能,您是否看到过以下项目:https://docs.microsoft.com/en-us/archive/blogs/changov/hosting-wpf-ui-cross-thread-and-cross-process

我在我的LOB应用中的多个外部进程中运行多个插件。我的框架来自上面的项目。

© www.soinside.com 2019 - 2024. All rights reserved.