Uczę się C # 3.5 i chcę wiedzieć, co [STAThread]
robi w naszych programach?
źródło
Uczę się C # 3.5 i chcę wiedzieć, co [STAThread]
robi w naszych programach?
Jest STAThreadAttribute
to zasadniczo wymóg, aby pompa komunikatów systemu Windows komunikowała się ze składnikami COM. Chociaż podstawowe formularze Windows Forms nie używają COM, wiele składników systemu operacyjnego, takich jak okna dialogowe systemu, korzysta z tej technologii.
MSDN wyjaśnia przyczynę nieco bardziej szczegółowo:
STAThreadAttribute wskazuje, że model wątków COM dla aplikacji jest jednowątkowy. Ten atrybut musi być obecny w punkcie wejścia każdej aplikacji korzystającej z formularzy Windows; jeśli zostanie pominięty, składniki systemu Windows mogą nie działać poprawnie. Jeśli ten atrybut nie jest obecny, aplikacja korzysta z wielowątkowego modelu mieszkania, który nie jest obsługiwany w formularzach Windows Forms.
Ten post na blogu ( Dlaczego wymagany jest STAThread? ) Również dość dobrze wyjaśnia ten wymóg. Jeśli chcesz uzyskać bardziej szczegółowe informacje o tym, jak działa model gwintowania na poziomie CLR, zapoznaj się z tym artykułem MSDN Magazine z czerwca 2004 r. (Archiwum, kwiecień 2009).
[STAThread]
?Mówi kompilatorowi, że jesteś w modelu apartamentu z jednym wątkiem. Jest to zła rzecz COM, jest zwykle używana w Windows Forms (GUI), ponieważ używa ona Win32 do rysowania, który jest zaimplementowany jako STA. Jeśli używasz czegoś, co jest modelem STA z wielu wątków, otrzymujesz uszkodzone obiekty.
Dlatego musisz wywoływać Gui z innego wątku (jeśli wykonałeś kodowanie formularzy).
Zasadniczo nie przejmuj się tym, po prostu zaakceptuj, że wątki GUI systemu Windows muszą być oznaczone jako STA, w przeciwnym razie zdarzają się dziwne rzeczy.
źródło
Przeczytaj więcej informacji tutaj (zarchiwizowane, czerwiec 2009)
i
Dlaczego wymagany jest STAThread?
źródło