2013-07-20 31 views
11

Próbowałem ten kod:błąd podczas próby skopiowania ciąg do schowka

Clipboard.SetText("Test!"); 

i dostaję ten błąd:

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.

Jak mogę to naprawić?

+0

Czy próbujesz wywołać tę metodę ('Clipboard.SetText()') z wątku tła? Czy możesz podać nam trochę więcej kontekstu (tj. Kod otaczający to wywołanie funkcji)? –

Odpowiedz

10

Put [STAThread] powyżej głównej metody:

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

Zgaduję, że używa WinForms, więc nie ma dostępu do 'Main'. –

+0

@newStackExchangeInstance Zrobiłem jedną z tych aplikacji do pisania sam w WinForm, więc jestem pewien, że to będzie działać dla niego :) – Thousand

+0

Nie mówię, że to nie zadziała, po prostu mówiąc, że edycja 'Main' na WinForms to PITA. –

26

Musisz wywołać tę metodę specjalnie, ponieważ używa kodu starszego typu. Wypróbuj to:

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

* Co * używa starego kodu? Schowek? COM nie jest "starszym". –

+0

Jest to bardzo przydatne do sprawdzania zawartości schowka w teście Selenium, np. jeśli masz przycisk kopiowania do schowka. –

+1

rozwiązało to dla mnie błąd. dodanie atrybutu nie było możliwe. – syonip

Powiązane problemy