C#スレッド間でクリップボードを呼び出すことができない解決方法

1499 ワード

最近のC#プロジェクトでは、スレッドを使用する必要があります.また、クリップボードを使用する必要があります.サブスレッドを作成した後、サブスレッドではクリップボードにデータが取得されていないことがわかりました.検索とテストを経て、最終的にこの問題が解決されました.解決方法を以下にまとめ、大手の参考にします.
ステップ1:

public void btnAutoFocus_Click(object sender,EventArgs e)
{
Thread myThread = new Thread(msc.AutoFocusArithmetic);
// , , ,
// 
// STA 
myThread .SetApartmentState(ApartmentState.STA); 
myThread .Start();
}


ステップ2:プログラム起動クラスも必要

static class Program
{
///
///  。
///

[STAThread] // , , 
// , , 
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
//Application.Run(new TestRGBPixelThumbForm());
//Application.Run(new TestImageForm());
//Application.Run(new TestJudgeDefinitionForm());
//Application.Run(new TestVirusForm());
}
}


ステップ3:これはクリップボードデータの読み取りです

private Image GetCaptureImage()
{
IDataObject iData = Clipboard.GetDataObject();
Image img = null;
if (iData != null)
{
if (iData.GetDataPresent(DataFormats.Bitmap))
{
img = (Image)iData.GetData(DataFormats.Bitmap);
}
else if (iData.GetDataPresent(DataFormats.Dib))
{
img = (Image)iData.GetData(DataFormats.Dib);
}
}
return img;
}

これで問題は解決された.