以下情况:.Net4 WPF应用程序在启动时创建多个appdomain,在第一个自定义创建的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包装器,用于与某些硬件交互的一些组件 . 包装器组件正在引发事件以中继硬件事件(按下按钮)但如果我在第一个自定义创建的appdomain中注册eventhandler,则不会引发这些事件 .

如果我从负责创建自定义appdomains的方法中删除[STAThread]属性,使第一个自定义创建的appdomain成为运行STA的第一个线程,则会引发事件 .

使用此设置运行多个窗口时,我遇到了本机组件的问题,但由于目前只有一个窗口,而且只有一个包装器实例卡住了 .