Winforms: один COM-объект нуждается в STAThread, другой требует MTAThread. Как я могу их использовать? - PullRequest
2 голосов
/ 05 октября 2009

Я пытаюсь создать приложение Winforms с двумя компонентами COM. Однако один из компонентов работает только при использовании [MTAThread], а другой - только с [STAThread].

Каким будет рекомендуемое решение?

1 Ответ

4 голосов
/ 05 октября 2009

Для форм 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();
...