以下情况:.Net4 WPF应用程序在启动时创建多个appdomains,在第一个自定义创建的appdomain中启动主窗口,模拟单个进程内的多实例行为,例如:我能够开始第二个,第三个......主窗口,其中每个窗口都会在自己的应用程序域中运行,与其他应用程序隔离(经验教训,不会影响本机组件)
AppDomain appDomain = AppDomain.CreateDomain("FancyAppDomainIdentifier");
appDomain.DoCallBack(() =>
{
var thread = new Thread(OnThreadStart);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
});
OnThreadStart()基本上是在做
new App().Run();
其中App是标准System.Windows.Application。
到目前为止,这一直很好用,但现在我有了第三方组件,它基本上是一些.net包装器,用于与某些硬件交互的一些com组件。包装器组件正在引发事件以中继硬件事件(按下按钮)但如果我在第一个自定义创建的appdomain中注册eventhandler,则不会引发这些事件。
如果我从负责创建自定义应用程序域的方法中删除[STAThread]属性,则将第一个自定义创建的appdomain作为第一个运行STA的线程,将引发事件。
在使用此设置运行多个窗口时,我遇到了本机组件的问题,但由于这只是一个窗口而且只有一个包装器实例被卡住了。