Yanıtlar:
Bu STAThreadAttribute
, Windows ileti pompasının COM bileşenleri ile iletişim kurması için bir gereksinimdir. Çekirdek Windows Forms COM kullanmasa da, sistem iletişim kutuları gibi işletim sisteminin birçok bileşeni bu teknolojiyi kullanır.
MSDN nedeni biraz daha ayrıntılı olarak açıklıyor:
STAThreadAttribute, uygulamanın COM iş parçacığı modelinin tek iş parçacıklı daire olduğunu belirtir. Bu öznitelik, Windows Forms kullanan herhangi bir uygulamanın giriş noktasında bulunmalıdır; atlanırsa, Windows bileşenleri düzgün çalışmayabilir. Öznitelik yoksa, uygulama Windows Forms için desteklenmeyen çok iş parçacıklı daire modelini kullanır.
Bu blog yazısı ( STAThread neden gereklidir? ) Gereksinimi de oldukça iyi açıklıyor. İş parçacığı modelinin CLR düzeyinde nasıl çalıştığına ilişkin daha ayrıntılı bir görünüm istiyorsanız , Haziran 2004'teki bu MSDN Magazine makalesine bakın (Arşiv, Nisan 2009).
Derleyiciye bir Tek İplikli Daire modelinde olduğunuzu söyler. Bu kötü bir COM şeydir, genellikle Windows Forms (GUI) için kullanılır ve çizim için Win32 olarak STA olarak uygulanır. Birden çok iş parçacığından STA modeli olan bir şey kullanıyorsanız, bozuk nesneler elde edersiniz.
Bu nedenle başka bir iş parçacığından Gui'ye çağırmanız gerekir (herhangi bir form kodlaması yaptıysanız).
Temelde endişelenmeyin, sadece Windows GUI iş parçacıklarının STA olarak işaretlenmesi gerektiğini kabul edin, aksi takdirde garip şeyler olur.
STAThreadAttribute, COM gerekiyorsa Tek iş parçacıklı COM daire kullanmak için bir iş parçacığı işaretler. Varsayılan olarak, .NET COM'u hiç başlatmaz. Yalnızca COM gerektiğinde, örneğin bir COM nesnesi veya COM Denetimi oluşturulduğunda veya sürükleme 'n' bırakması gerektiğinde, COM başlatılır. Bu durumda, .NET, iş parçacığının çok iş parçacıklı veya tek iş parçacıklı bir daireye birleştirilip birleştirilmeyeceğini belirten bir bayrak alan temel CoInitializeEx işlevini çağırır.
Daha fazla bilgiyi burada okuyun (Arşivlendi, Haziran 2009)
ve
[STAThread]
?