Winforms: один объект COM нуждается в Stathread, а другому нужен Mtathread. Как я могу их использовать?

StackOverflow https://stackoverflow.com/questions/1521816

Вопрос

Я пытаюсь создать приложение 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top