Un thread che crea qualsiasi finestra deve sempre creare un apartment a thread singolo. Uno STA fornisce garanzie di threading per qualsiasi oggetto COM che non sia thread-safe. Pochissimi sono. L'infrastruttura COM garantisce che i metodi di tale oggetto vengano sempre richiamati dal thread corretto, effettuando il marshalling della chiamata se necessario. Piuttosto simile a Control.Begin/Invoke() ma fatto automaticamente senza alcuna codifica.
Un numero di servizi Windows si basa su tale garanzia. In particolare gli Appunti, Drag + Drop e le finestre di dialogo della shell (come OpenFileDialog) non funzioneranno correttamente senza di essa. E molti controlli ActiveX, WebBrowser è uno di quelli che userai in un progetto Winforms. Rendere il thread dell'interfaccia utente un thread MTA causa una diagnosi difficile, mentre il deadlock è comune. O una rapida eccezione quando il wrapper .NET per il componente verifica che sia stato creato su uno STA.
fonte
2010-11-16 13:56:58