gpt4 book ai didi

wpf - 在一个 UI 线程上跨多个 AppDomain 运行 WPF 有什么问题?

转载 作者:行者123 更新时间:2023-12-04 14:23:25 24 4
gpt4 key购买 nike

我们正在考虑创建一个跨多个 AppDomain 运行的 WPF UI。其中一个应用程序域将运行应用程序,而其余的 AppDomains 将托管一系列用户控件和逻辑。当然,这个想法是将这些用户控件和逻辑与主应用程序隔离开来。

Here是使用 MAF/System.AddIn 执行此操作的示例。其他人对此有何经验?此解决方案如何处理可能发生在一个用户控件中的 RoutedEvents/Commands,并在 AppDomains 中正确序列化这些事件? WPF资源呢?是否可以跨 AppDomain 无缝访问它们?

最佳答案

老问题,但尽管如此:您将需要有多个 UI 线程 - 每个 AppDomain 一个。像这样创建它们:

        var thread = new Thread(() =>
{
var app = new Application();
app.Run();
});
thread.Name = AppDomain.CurrentDomain.FriendlyName;
thread.SetApartmentState(ApartmentState.STA);
thread.Start();

最大的挑战是您无法在 AppDomain 之间发送 FrameworkElements(它们不是 MarshalByRefObject),但您可以使用 FrameworkElementAdapters.ViewToContractAdapter() 和 ContractAdapterToView() 方法来解决此限制。见 FrameworkElementAdapters MSDN 页面了解更多详情。

然后,一旦你有了这个,恕我直言,最大的问题是你不能在来自“远程”域的 FrameworkElement 之上放置任何东西(经典的“空域问题”)。见 this thread有关这方面的更多信息。

关于wpf - 在一个 UI 线程上跨多个 AppDomain 运行 WPF 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/583505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com