首页 > 编程 > C# > 正文

C#线程间不能调用剪切板的解决方法

2020-01-24 02:39:48
字体:
来源:转载
供稿:网友

最近做一个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;}

至此问题得以解决。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表