Co to robi, to zapewnia CoInitialize
nazywane jest określeniem COINIT_APARTMENTTHREADED jako parametru. Jeśli nie używasz żadnych składników COM ani formantów ActiveX, nie będzie to miało żadnego wpływu na Ciebie. Jeśli to zrobisz, będzie to kluczowe.
Formanty wielowątkowe są w rzeczywistości jednowątkowe, wywołania do nich mogą być przetwarzane tylko w mieszkaniu, w którym zostały utworzone.
Więcej szczegółów z MSDN:
Obiekty utworzone w mieszkaniu jednowątkowym (STA) odbierają wywołania metod tylko z wątku swojego mieszkania, więc wywołania są serializowane i docierają tylko do granic kolejki komunikatów (gdy wywoływana jest funkcja Win32 PeekMessage lub SendMessage).
Obiekty utworzone w wątku COM w mieszkaniu wielowątkowym (MTA) muszą mieć możliwość odbierania wywołań metod z innych wątków w dowolnym momencie. Zwykle można zaimplementować pewną formę kontroli współbieżności w kodzie obiektu wielowątkowego przy użyciu prymitywów synchronizacji Win32, takich jak sekcje krytyczne, semafory lub muteksy, aby pomóc chronić dane obiektu.
Gdy obiekt skonfigurowany do działania w mieszkaniu z wątkami neutralnymi (NTA) jest wywoływany przez wątek znajdujący się w STA lub MTA, ten wątek jest przenoszony do NTA. Jeśli ten wątek następnie wywoła CoInitializeEx, wywołanie kończy się niepowodzeniem i zwraca RPC_E_CHANGED_MODE.