C#でデータをクリップボードにコピーする方法 からコードを試しました:
Clipboard.SetText("Test!");
そして、私はこのエラーを受け取ります:
OLE呼び出しを行う前に、現在のスレッドをシングルスレッドアパートメント(STA)モードに設定する必要があります。
Main
関数にSTAThreadAttribute
がマークされていることを確認してください。
どうすれば修正できますか?
プット[STAThread]
メインメソッドの上:
[STAThread]
static void Main()
{
}
レガシーコードを使用しているため、このメソッドを特別に呼び出す必要があります。これを試して:
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
クリップボードにはSTAThreadからのみアクセスできます。
これを解決する最も簡単な方法は、Main()
メソッドの上に[STAThread]
を置くことですが、何らかの理由でそれができない場合は、STAThreadセットを作成する別のクラスを使用できます。あなたへの文字列値。
public static class Clipboard
{
public static void SetText(string p_Text)
{
Thread STAThread = new Thread(
delegate ()
{
// Use a fully qualified name for Clipboard otherwise it
// will end up calling itself.
System.Windows.Forms.Clipboard.SetText(p_Text);
});
STAThread.SetApartmentState(ApartmentState.STA);
STAThread.Start();
STAThread.Join();
}
public static string GetText()
{
string ReturnValue = string.Empty;
Thread STAThread = new Thread(
delegate ()
{
// Use a fully qualified name for Clipboard otherwise it
// will end up calling itself.
ReturnValue = System.Windows.Forms.Clipboard.GetText();
});
STAThread.SetApartmentState(ApartmentState.STA);
STAThread.Start();
STAThread.Join();
return ReturnValue;
}
}