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();
Другие вопросы по тегам