Domanda

Sto imparando C # 3.5 e voglio sapere cosa fa [STAThread] nei nostri programmi?

È stato utile?

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

Perché è necessario STAThread?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top