Как я могу установить состояние квартиры COM для кода, загруженного с помощью `AppDomain.ExecuteAssembly`?

Когда я создаю 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,

1 ответ

Решение

Я повторно публикую комментарий Ханса Пассанта, приведенный выше, в качестве ответа, поскольку он, по сути, отвечает на большинство вопросов:

"Нет, создание [домена приложения] не создает поток. Вы выполняете с состоянием потока, который сделал AppDomain.Create() вызов. Что не достаточно хорошо, вы не можете выполнить обещание STA. Вам понадобится больше кода в [домене приложения], чтобы позаботиться об этом, код создания потока и Application.Run() вызов должен работать в этом [домене приложения]."

Другие вопросы по тегам