我们正在寻找创建跨多个AppDomain运行的
WPF UI.其中一个应用程序域将运行该应用程序,而剩余的AppDomain将承载一系列用户控件和逻辑.当然,这个想法是将这些用户控件和逻辑远离主应用程序.
Here是使用MAF / System.AddIn执行此操作的示例.其他人对此有哪些经验?此解决方案如何处理可能在一个用户控件内部发生的RoutedEvents / Commands,并在AppDomains中正确地序列化? WPF资源怎么样?可以通过AppDomains无缝访问它们吗?
最佳答案 老问题,但是:你需要有多个UI线程 – 每个AppDomain一个.像这样创建它们:
var thread = new Thread(() =>
{
var app = new Application();
app.Run();
});
thread.Name = AppDomain.CurrentDomain.FriendlyName;
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
最大的挑战是你不能在AppDomains之间发送FrameworkElements(它们不是MarshalByRefObject),但你可以使用FrameworkElementAdapters.ViewToContractAdapter()和ContractAdapterToView()方法来解决这个限制.有关更多详细信息,请参见FrameworkElementAdapters MSDN页面.
然后,一旦你有了这个,最大的问题恕我直言,你不能在“远程”域(经典的“空域问题”)的FrameworkElement之上放置任何东西.有关详细信息,请参阅this thread.