Winforms: один COM-объект нуждается в STAThread, другой требует MTAThread. Как я могу их использовать?
Я пытаюсь создать приложение Winforms с двумя компонентами COM. Тем не менее, один из компонентов работает только при использовании [MTAThread]
а другой работает только с [STAThread]
,
Каким будет рекомендуемое решение?
1 ответ
Решение
Для форм Windows требуется, чтобы [STAThread] присутствовал в главной точке входа. Он будет работать только в однопоточной квартире. Вы можете использовать свой COM-объект STA в потоке пользовательского интерфейса в Windows Forms, без проблем.
Типичный подход для этого состоит в том, чтобы создать свой собственный поток и установить для Thread.ApartmentState значение MTA (хотя это значение по умолчанию) для отдельного потока. Инициализируйте и используйте ваши MTA-резьбовые COM-компоненты из этого потока.
ThreadStart threadEntryPoint = ...;
var thread = new Thread(threadEntryPoint);
thread.ApartmentState = ApartmentState.MTA; // set this before you call Start()!
thread.Start();