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#编程实现查看剪切板内容的方法.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApp
-
C#实现剪切板功能
C#剪切板 Clipboard类 我们现在先来看一下官方文档的介绍 位于:System.Windows.Forms 命名空间下 Provides methods to place data on and retrieve data from the system Clipboard. This class cannot be inherited. 提供一些方法来存放数据和取回数据从系统的剪切板,这个类不能被实例化. 从官方的描述我们可以看出Clipboard是一个用来存放一些临时数据来用的...
-
c#剪切板操作的简单实例
复制代码 代码如下: //运用剪切版 Clipboard.SetDataObject(textBox1.Text,true); //将textbox1的文本放在剪切版中 // GetDataObject检索当前剪贴板上的数据 IDataObject iData = Clipboard.GetDataObject(); // 将数据与指定的格式进行匹配,返回bool if (iData.GetDataPresent(DataFormats.Text)) { // GetData检索数据并指定一个格
-
C#操作Clipboard读取剪切板中数据实例详解
本文实例讲述了C#操作Clipboard读取剪切板中数据的方法.分享给大家供大家参考.具体分析如下: 1 自定义一个类,并且保证它的可序列化的:实现ISerializable接口:或者用[Serializable]标记(如果有父类,则父类也需要被标记:可以[NonSerialized()]标记类中不想被序列化的字段) 2 注册自定义数据格式:调用静态方法DataFormats.GetFormat() 3 保存数据到clipboard:利用IdataObject接口,创建一个数据对象,并设置数据:
-
C#线程间不能调用剪切板的解决方法
最近做一个C#项目,需要用到线程,而且要用到剪切板,创建了一个子线程之后发现在子线程中剪切板上获取不到数据,经过一番查找与测试最终该问题得以解决,现将解决方法归纳如下,供大家参考: 第一步: public void btnAutoFocus_Click(object sender,EventArgs e) { Thread myThread = new Thread(msc.AutoFocusArithmetic); //注意,一般启动一个线程的时候没有这句话,但是要操作剪切板的话这句话是必需要
-
C#向线程中传递多个参数的解决方法(两种)
问题: 对于多线程编程,很多时候往往需要向线程中传递多个参数,而C#中的线程只接收1个object类型的参数(如下): Thread t = new Thread(new ParameterizedThreadStart(newthread)); t.start(参数); void newthread(object) { ............. } 而现在需要往线程中传递多个参数,比如method方法想用单独的线程来跑 void method(int begin,int end) { ...
-
Mybatis传list参数调用oracle存储过程的解决方法
怎么利用MyBatis传List类型参数到数据库存储过程中实现批量插入数据? MyBatis中参数是List类型时怎么处理?大家都知道MyBatis批处理大量数据是很难做到事务回滚的(事务由Spring管理),都将逻辑写在存储中又是及其头疼的一件事(参数长度也有限制),那么我想的是将参数在后台封装为单个或多个list集合,直接通过MyBatis将此参数传到数据库存储过程中,一来摆脱了MyBatis批量插入数据的诸多限制(例如:不能实时返回主键.foreach标签循环集合长度有限制),二来就是在存
-
在Form_Load里面调用Focus无效的解决方法
因为觉得SplitContainer的虚线很丑,所以在程序启动的时候,想把焦点移到别的控件上去. 在Form_Load里面添加了 listview1.Focus(); 结果没效果. 查了查,找到了原因: 在调用Form_Load的时候,Form其实还没有进入展示阶段,自然Focus()调用也就没效果了. 解决方法: 在Focus()之前调用this.Show(); 或者更简单的,把Focus()函数调用移到Form_Shown事件处理中.
-
IIS7.5 HTTP 错误 500 调用loadlibraryex失败的解决方法
在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Error 调用 LoadLibraryEx 失败,在 ISAPI 筛选器 C:\Windows\Microsoft.NET\Framework\v4.0.30319\\aspnet_filter.dll 上 虽然打开php网页出现提示.net framework错误有点莫名其妙,但出 在IIS7.5打开网页的时候,提示: HTTP 错误 500.0 - Internal Server Erro
-
jquery live()调用不存在的解决方法
在新版的jquery中,live()方法已经被删除了,所以我们在调用的时候会提示该函数不存在,js报错. 解决方法是使用on()函数替换, 原来的写法是: 如果直接替换为on()方法,那么新生成的元素再次点击事件的时候不会有任何效果,新的语法是: 这里涉及到一个问题,$("body")这里为什么是body,其实我们可以选择其他的距离#company_logo更近的节点,这样会有更好的性能,其实on()是在body中找#company_logo节点,所以我们吧body换成#compa
-
NAV导致IIS调用FSO失败的解决方法
症状: 当你浏览调用FileSystemObject的ASP页面时, 对页面的请求处于停止状态并最终导致页面在浏览器中的超时. 原因: 这种问题是因为 Norton Antivirus 软件的 Script Blocking 功能阻止了脚本操作对文件系统的访问,例如使用 FileSystemObject. 这种问题不仅在ASP网络应用程序中存在,同时它也会在其他技术中发生,例如 Windows Script. 注意:该问题即使在 Norton Anitvirus 在被禁止时仍然会发生. 解决:
-
Android 使用【AIDL】调用外部服务的解决方法
在Android 中有一种服务说是服务其实倒不如说是一个接口,这个接口名为:Android Interface Definition Language ,这个接口可提供跨进程访问服务,英文缩写为:AIDL. 此种服务的好处在于,多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作,下面将通过一个DEMO 演示AIDL 是如何为应用程序之间提供服务的.本文大纲为:•1.创建AIDL 服务端.•2.创建AIDL 客户端.•3.客户端调用服务端提供的服务接口.
-
浅谈Java线程间通信之wait/notify
Java中的wait/notify/notifyAll可用来实现线程间通信,是Object类的方法,这三个方法都是native方法,是平台相关的,常用来实现生产者/消费者模式.先来我们来看下相关定义: wait() :调用该方法的线程进入WATTING状态,只有等待另外线程的通知或中断才会返回,调用wait()方法后,会释放对象的锁. wait(long):超时等待最多long毫秒,如果没有通知就超时返回. notify() :通知一个在对象上等待的线程,使其从wait()方法返回,而返回的前提
随机推荐
- 详解AngularJS中module模块的导入导出
- thinkPHP5实现数据库添加内容的方法
- SQL Server2008导出数据之Excel详细解析
- javascript与CSS复习(《精通javascript》)
- win2000/winXP 停止打印的bat
- XenServer 安装及虚拟机部署详细指南
- js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
- JS实现合并两个数组并去除重复项只留一个的方法
- JS密码生成与强度检测完整实例(附demo源码下载)
- asp.net中使用cookie传递参数的方法
- php中使用__autoload()自动加载未定义类的实现代码
- Zend Framework基于Command命令行建立ZF项目的方法
- 深入理解Python中字典的键的使用
- 详解Android OkHttp完全解析
- JSONP跨域的原理解析及其实现介绍
- Golang极简入门教程(三):并发支持
- 你所不了解的javascript操作DOM的细节知识点(一)
- textarea中的手动换行处理的jquery代码
- input 日期选择功能的javascript代码
- JavaScript基于ajax编辑信息用法实例