1

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

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

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

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

我不知道如何开始,到目前为止很难用谷歌搜索。任何意见是极大的赞赏。

4

3 回答 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/

我对此非常感兴趣,因此,如果您成功了,请告诉我们这对您有何帮助!

于 2009-07-13T21:22:56.970 回答
1

来晚了。如果您仍然需要这个,您是否看过这个项目:https ://docs.microsoft.com/en-us/archive/blogs/changov/hosting-wpf-ui-cross-thread-and-cross-process

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

于 2011-02-03T22:38:27.943 回答
0

可能不是最简单的任务。您是否考虑过在单独的应用程序域中托管您的 3rd 方内容?这样,您还将获得良好的隔离级别,同时为您节省另一个项目的麻烦。它是否必须不断刷新,或者您可以在应用程序中的预定义点刷新?也许一些方案可以让您基本上对第 3 方输出进行屏幕截图并将其显示为原始应用程序中的图像......

于 2009-07-13T21:01:24.953 回答