手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#线程间不能调用剪切板的解决方法
C#线程间不能调用剪切板的解决方法
摘要:最近做一个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#中一些你可能没用过的调试窗口的方法

C#调用Java类的实现方法

C#线程 BeginInvoke和EndInvoke使用方法

C#用Lambda和委托实现模板方法

C#删除文件目录或文件的解决方法

使用C#获取系统特殊文件夹路径的解决方法

C# 调用C++写的dll的实现方法

解析Silverlight调用WCF/Rest异常的解决方法

C#异步调用的好处和方法分享

在Form_Load里面调用Focus无效的解决方法

精品推荐
分类导航