C#线程间不能调用剪切板的解决方法_C#教程-查字典教程网
C#线程间不能调用剪切板的解决方法
C#线程间不能调用剪切板的解决方法
发布时间:2016-12-28 来源:查字典编辑
摘要:最近做一个C#项目,需要用到线程,而且要用到剪切板,创建了一个子线程之后发现在子线程中剪切板上获取不到数据,经过一番查找与测试最终该问题得以...

最近做一个C#项目,需要用到线程,而且要用到剪切板,创建了一个子线程之后发现在子线程中剪切板上获取不到数据,经过一番查找与测试最终该问题得以解决,现将解决方法归纳如下,供大家参考:

第一步:

public void btnAutoFocus_Click(object sender,EventArgs e) { Thread myThread = new Thread(msc.AutoFocusArithmetic); //注意,一般启动一个线程的时候没有这句话,但是要操作剪切板的话这句话是必需要加上的, //因为剪切板只能在单线程单元中访问 //这里的STA就是指单线程单元 myThread .SetApartmentState(ApartmentState.STA); myThread .Start(); }

第二步:还需要将Program启动类中

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()); } }

第三步:这个是读取剪切板数据

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; }

至此问题得以解决。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C#教程学习
    热门C#教程学习
    编程开发子分类