2013-07-20 25 views
11

をクリップボードに文字列をコピーしようとしているとき:エラー私はこのコードを試してみました

Clipboard.SetText("Test!"); 

そして、私はこのエラーを取得する:

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.

私はそれを解決することができますか?

+0

このメソッド( 'Clipboard.SetText()')をバックグラウンドスレッドから呼び出そうとしていますか?コンテキスト(つまり、その関数呼び出しを取り巻くコード)をいくつか追加できますか? –

答えて

10

はあなたの主なメソッドの上[STAThread]を置く:

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

私は彼がWinFormsを使用していると推測しているので、彼は 'Main'にアクセスすることはできません。 –

+0

@newStackExchangeInstance私はwinformsでこれらのクリップボードアプリケーションの1つを自分で作ったので、これが彼のためにはうまくいくと確信しています:) – Thousand

+0

WinFormsで 'Main'を編集するのがPITAだと言っても意味がありません。 –

26

あなたはそれがいくつかのレガシーコードを使用しているため、特別にそのメソッドを呼び出す必要があります。これを試してください:

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

* *は*従来のコードを使用していますか?クリップボードですか? COMは「レガシー」ではありません。 –

+0

これは、セレニウムテストのクリップボードの内容をチェックするのに非常に便利です。コピーするクリップボードボタンがある場合 –

+1

これは私のためにエラーを解決しました。属性を追加していませんでした。 – syonip

関連する問題