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#编程实现查看剪切板内容的方法
本文实例讲述了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#操作Clipboard读取剪切板中数据实例详解
本文实例讲述了C#操作Clipboard读取剪切板中数据的方法.分享给大家供大家参考.具体分析如下: 1 自定义一个类,并且保证它的可序列化的:实现ISerializable接口:或者用[Serializable]标记(如果有父类,则父类也需要被标记:可以[NonSerialized()]标记类中不想被序列化的字段) 2 注册自定义数据格式:调用静态方法DataFormats.GetFormat() 3 保存数据到clipboard:利用IdataObject接口,创建一个数据对象,并设置数据:
-
c#剪切板操作的简单实例
复制代码 代码如下: //运用剪切版 Clipboard.SetDataObject(textBox1.Text,true); //将textbox1的文本放在剪切版中 // GetDataObject检索当前剪贴板上的数据 IDataObject iData = Clipboard.GetDataObject(); // 将数据与指定的格式进行匹配,返回bool if (iData.GetDataPresent(DataFormats.Text)) { // GetData检索数据并指定一个格
-
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()方法返回,而返回的前提
随机推荐
- jQuery实现简单的回到顶部totop功能示例
- PHP 如何获取二维数组中某个key的集合
- JavaScript中原型链存在的问题解析
- PHP中文件读、写、删的操作(PHP中对文件和目录操作)
- python使用mysqldb连接数据库操作方法示例详解
- asp复制文件夹代码
- C#线程处理系列之线程池中的I/O线程
- 令PHP初学者头疼十四条问题大总结
- js全选按钮的实现方法
- 用Python编写分析Python程序性能的工具的教程
- PHP扩展程序实现守护进程
- 浅析JavaScript作用域链、执行上下文与闭包
- jQuery中Dom的基本操作小结
- Android模糊处理简单实现毛玻璃效果
- Java 中jasperReport实现动态列打印的实现代码
- jquery1.4.2 for Visual studio 2010 模板文件
- 常用电脑族如何防止电脑辐射
- PHP中Session ID的实现原理实例分析
- python多线程实现TCP服务端
- 将spring boot应用打入docker中运行的实现方法
