当我创建Thread
时,我可以选择在启动它之前明确设置其COM单元状态。例如:
// using System.Threading;
var thread = new Thread(…);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
但是当我创建一个AppDomain
并加载一些代码时,我似乎没有明确控制线程创建,所以我无法调用SetApartmentState
:
// using System;
var pluginAppDomain = AppDomain.Create("PluginAppDomain");
pluginAppDomain.ExecuteAssembly(@"Plugin.dll");
有没有办法指定在AppDomain
内创建的主/入口线程应该使用特定的COM单元状态?
我知道Plugin.dll
的主要输入方法可以标有[STAThread]
或[MTAThread]
属性;但我们假设Plugin.dll
未明确声明或设置COM公寓状态,并且我无法更改Plugin.dll
。
答案 0 :(得分:0)
我重新发布Hans Passant's comment above作为答案,因为它基本上回答了大部分问题:
"不,创建[app域]不会创建线程。您正在执行进行
AppDomain.Create()
调用的线程的状态。哪个不够好,你不能坚持STA的承诺。您需要[app域名]中的更多代码来处理此问题,线程创建代码和Application.Run()
调用需要在[app域]中运行。"