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#剪切板 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#编程实现查看剪切板内容的方法.分享给大家供大家参考,具体如下: 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#项目,需要用到线程,而且要用到剪切板,创建了一个子线程之后发现在子线程中剪切板上获取不到数据,经过一番查找与测试最终该问题得以解决,现将解决方法归纳如下,供大家参考: 第一步: 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()方法返回,而返回的前提
随机推荐
- MongoDB TTL索引的实例详解
- 正则表达式验证用户名、密码、手机号码、身份证(推荐)
- mysql 分页优化解析
- jquery编写Tab选项卡滚动导航切换特效
- PJBlog插件 防刷新的在线播放器
- mysql获取字符串长度函数(CHAR_LENGTH)
- js如何实现淡入淡出效果
- 浅谈JavaScript中运算符的优先级
- AJAX开发简略 (第一部分)
- 简述MySQL与Oracle的区别
- WDB论坛存在多个严重漏洞
- 服务器的MSDTC不可用解决办法
- Java对日期Date类进行加减运算、年份加减月份加减、时间差等等
- Cisco路由器的安全配置简易方案
- 如何实现网络分段
- SpringBoot任务调度器的实现代码
- webpack结合express实现自动刷新的方法
- golang如何自定义json序列化应用详解
- 浅谈Vue.use的使用
- Python 异步协程函数原理及实例详解