C#スレッド間でクリップボードを呼び出すことができない解決方法
1499 ワード
最近のC#プロジェクトでは、スレッドを使用する必要があります.また、クリップボードを使用する必要があります.サブスレッドを作成した後、サブスレッドではクリップボードにデータが取得されていないことがわかりました.検索とテストを経て、最終的にこの問題が解決されました.解決方法を以下にまとめ、大手の参考にします.
ステップ1:
ステップ2:プログラム起動クラスも必要
ステップ3:これはクリップボードデータの読み取りです
これで問題は解決された.
ステップ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;
}
これで問題は解決された.