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