2013-07-20 12 views
11

Ho provato questo codice:Errore durante il tentativo di copiare negli appunti stringa

Clipboard.SetText("Test!"); 

E io ottenere questo errore:

Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it.

Come posso risolvere il problema?

+0

Stai cercando di chiamare questo metodo ('Clipboard.SetText()') da un thread in background? Puoi darci qualche altro contesto (ad esempio, il codice che circonda quella chiamata di funzione)? –

risposta

10

Metti [STAThread] sopra il principale metodo:

[STAThread] 
static void Main() 
{ 
} 
+0

Suppongo che stia usando WinForms, quindi non ha accesso a 'Main'. –

+0

@newStackExchangeInstance ho creato io stesso una di queste applicazioni di appunti in winforms, quindi sono abbastanza sicuro che funzionerà per lui :) – Thousand

+0

Non dicendo che non funzionerà, solo dicendo che la modifica di "Main" su WinForms è un PITA. –

26

è necessario chiamare quel metodo speciale, in quanto utilizza un codice legacy. Prova questo:

Thread thread = new Thread(() => Clipboard.SetText("Test!")); 
thread.SetApartmentState(ApartmentState.STA); //Set the thread to STA 
thread.Start(); 
thread.Join(); //Wait for the thread to end 
+1

* Cosa * utilizza il codice legacy? Gli appunti? COM non è "legacy". –

+0

Questo è molto utile per controllare il contenuto degli appunti in un test al selenio, ad es. se hai una copia sul pulsante degli appunti. –

+1

questo ha risolto l'errore per me. aggiungendo l'attributo no. – syonip

Problemi correlati