Как я могу установить состояние квартиры 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()
вызов должен работать в этом [домене приложения]."