Che cosa significa [STAThread] fare?
-
20-09-2019 - |
Domanda
Sto imparando C # 3.5 e voglio sapere cosa fa [STAThread]
nei nostri programmi?
Soluzione
Il STAThreadAttribute
è essenzialmente un requisito per la pompa di messaggi di Windows per comunicare con i componenti COM. Anche se le forme di Windows non utilizza COM, molti componenti del sistema operativo, come le finestre di dialogo di sistema fanno utilizzare questa tecnologia.
MSDN spiega il motivo in un po ' più in dettaglio:
STAThreadAttribute indica che il modello di threading COM per la applicazione è single-threaded appartamento. Questo attributo deve essere presente sul punto di ingresso di qualsiasi applicazione che utilizza Windows Form; se viene omesso, il Windows componenti potrebbero non funzionare correttamente. Se l'attributo non è presente, il applicazione utilizza il multithreading modello di appartamento, che non è supportato per Windows Form.
questo post del blog ( Perché è STAThread richiesta? ) spiega anche il requisito abbastanza bene. Se si desidera una visione più approfondita di come il modello di threading funziona a livello CLR, vedere questo articolo MSDN Magazine dal giugno 2004 (Archiviati, aprile 2009).
Altri suggerimenti
Si dice al compilatore che sei in un thread Appartamento Modello unico. Questa è una cosa COM male, di solito è utilizzato per Windows Forms (GUI) che utilizza come Win32 per il suo disegno, che viene implementato come STA. Se si utilizza qualcosa che è modello STA da più thread quindi si ottiene oggetti danneggiati.
Questo è il motivo per cui si deve richiamare sul Gui da un altro thread (se hai fatto qualsiasi forma di codifica).
In sostanza non preoccupatevi, basta accettare che le discussioni Windows GUI devono essere contrassegnati come STA roba altrimenti strano accade.
Lo STAThreadAttribute segna un filo per utilizzare il single-threaded COM Appartamento se è necessaria COM. Di predefinita, .NET non verrà inizializzato COM a tutti. E 'solo quando è necessaria COM, come quando un oggetto COM o Control COM viene creato o quando il drag 'n' drop è necessario, che COM viene inizializzato. quando ciò accade, NET chiama funzione sottostante CoInitializeEx, che prende un flag che indica se aderire il filo di un multi-threaded o appartamento single-threaded.
Per maggiori informazioni qui (Archiviati, giugno 2009)
e