2009-08-18 9 views

Odpowiedz

32

Jest to bardziej wymaganie Windows niż WPF i wraca do oryginalnego projektu formularzy i formantów systemu Windows, sprzed wcześniej .NET.

STAThread odnosi się do "Single-Threaded Apartments", który odnosi się do modelu gwintowania używanego przez bieżący (główny) wątek. Używany model wątków dyktuje, w jaki sposób inne aplikacje .NET i COM będą komunikować się z aplikacją (i z natury jej wątkami). Jednowątkowy model aplikacji wymaga, aby żaden pojedynczy obiekt nie "żył" w więcej niż jednym wątku STA naraz, weryfikuje model wątków MTA; i pozwala na przekazywanie wskaźników do danych w mieszkaniach tylko przez rozkazowanie jako obiekt.

Zasadniczo, z deklaracją [STAThread], inne aplikacje będą wiedzieć, jakie są zasady twojego wątku podczas wysyłania danych. Model STA jest najczęstszym modelem wątków dla wątków/aplikacji systemu Windows; ale czasami natkniesz się na pewien kod, który nie będzie działał, jeśli zostanie wywołany z wątku modelowanego w STA, ponieważ jest zaprojektowany do wysyłania/odbierania danych przez granice wątków w sposób niezgodny z ograniczeniami STA. Wiedząc z góry, jaki model mieszkania danego wątku pozwala IDE wychwycić te wyjątki podczas kompilacji, zamiast uzyskiwać nieprzyjemne błędy naruszenia dostępu, gdy próbujesz użyć obiektu przez granice wątków w czasie wykonywania.

Można przeczytać o STA i MTA wątków z artykułem MSDN pod adresem: http://msdn.microsoft.com/en-us/library/ms680112(VS.85).aspx

Zauważ, że nawet zwykłe aplikacje .NET (WPF) sprzed wymagała [STAThread] Deklaracja szczycie main().

4

Istnieje doskonała odpowiedź na to w tym blog entry.

Cytując z blogu:

Gdy STAThreadAttribute jest stosowane, zmienia stan bieżącego wątku mieszkanie być pojedynczy gwintowany. Bez wdawania się w ogromną dyskusję na temat wątków COM i , ten atrybut zapewnia mechanizm komunikacyjny między bieżącym wątkiem a innymi wątkami, które może chcieć z nim porozmawiać przez COM. Gdy używasz Windows Forms, w zależności od , może to być przy użyciu współdziałania COM, aby komunikować się z komponentami systemu operacyjnego . Dobrym tego przykładem są Schowek i okna dialogowe plików.

Windows Forms nie jest obsługiwany w ramach ani w MTA, ani w bezpłatnym apartamencie z gwintem. Aplikacje korzystające z systemu Windows Forms powinny zawsze zadeklarować używane przez siebie mieszkanie w stylu , ponieważ niektóre inne komponenty mogą zainicjować nieprawidłowy stan mieszkania w stanie .

+0

jeśli to nie jest "zbyt skomplikowane" dla początkującego .. to nie musisz ..uwielbiam czytać :) –

+2

Wciąż jest miło mieć podsumowanie na SO w celach informacyjnych, a jeśli wspomniany blog przechodzi w tryb offline, post zostaje usunięty, Microsoft spala się w kuli ognia piekielnego itp. –

Powiązane problemy