Я довольно долго не использовал OLE / COM в качестве разработчика, но в настоящее время мне нужно использовать некоторые сторонние библиотеки кода OCX из программы на C #.
Программа C # использует многопоточность (это сервер сокетов TCP). OCX помечены как модель резьбы квартиры. Из моего прочтения я пришел к выводу, что если я буду осторожен в создании одного экземпляра каждого OCX для потока и только для использования этого экземпляра из потока, который его создал, у меня все будет в порядке.
Я тоже сделал: -
myThread.SetApartmentState(ApartmentState.STA);
перед началом каждого потока.
Должно ли этого быть достаточно для безопасного использования OCX?
Симптом, который я вижу, состоит в том, что все потоки могут создавать OCX, но на случайной основе вызовы для подготовки и инициализации OCX не выполняются. Похоже, они не возвращают никакой полезной информации о том, почему.
Может кто-нибудь объяснить, что я вижу, или дать мне руководство по безопасному использованию этих OCX из многопоточного кода?
В качестве альтернативы, я должен просто отказаться и создать один экземпляр каждого и всех OCX в одном потоке и отправить все вызовы к ним через потокобезопасную очередь или подобное?