Questo è più un requisito di Windows che uno di WPF e torna alla progettazione originale di moduli e controlli di Windows, da prima di .NET.
STAThread fa riferimento a "Appartamenti a filettatura singola" che fa riferimento al modello di filettatura utilizzato dalla filettatura corrente (principale). Il modello di threading in uso determina in che modo altre applicazioni .NET e COM parleranno con l'applicazione (e intrinsecamente i suoi thread). Il modello di applicazione a thread singolo richiede che nessun singolo oggetto "viva in" più di un thread STA alla volta, contro il modello di thread MTA; e consente il passaggio dei puntatori ai dati attraverso gli appartamenti solo tramite marshalling-as-object.
Fondamentalmente, con la dichiarazione [STAThread], altre applicazioni sapranno quale politica del thread è quando si inviano i dati. Il modello STA è il modello di threading più comune per thread/applicazioni Windows; ma a volte ti imbatti in un determinato codice che non verrà eseguito se chiamato da un thread modellato STA, poiché è progettato per inviare/ricevere dati oltre i limiti dei thread in modi che non sono conformi alle restrizioni STA. Sapendo in anticipo che cosa il modello di appartamento di un determinato thread consente all'IDE di intercettare queste eccezioni in fase di compilazione invece di commettere errori di violazione dell'accesso quando si tenta di utilizzare un oggetto oltre i limiti del thread durante il runtime.
Si può leggere su STA e thread MTA dal l'articolo di MSDN a: http://msdn.microsoft.com/en-us/library/ms680112(VS.85).aspx
Nota che anche normali applicazioni .NET (da prima di WPF) hanno richiesto la dichiarazione [STAThread] cima del main().
fonte
2009-08-18 12:04:05
se non è "troppo complicato" per un principiante .. quindi non è necessario ..mi piace leggere :) –
È ancora bello avere un riepilogo qui su SO per scopi di riferimento, e se il suddetto blog va offline, il post viene eliminato, Microsoft brucia in una palla di hellfire, ecc. –