0

当我创建一个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");

有没有办法指定在 an 内部创建的主/入口线程AppDomain应该使用特定的 COM 单元状态?

我知道Plugin.dll' 的主要入口方法可以用[STAThread]or[MTAThread]属性标记;但是让我们假设Plugin.dll没有明确声明或设置 COM 单元状态,并且我无法更改Plugin.dll.

4

1 回答 1

0

我在上面重新发布 Hans Passant 的评论作为答案,因为它基本上回答了这个问题的大部分:

“不,创建 [应用程序域] 不会创建线程。您正在使用发出AppDomain.Create()调用的线程的状态执行。这还不够好,您无法遵守 STA 承诺。您需要在[app domain] 来处理这个问题,线程创建代码和Application.Run()调用需要在那个 [app domain] 中运行。”

于 2017-05-09T12:02:13.247 回答