Clipboard.GetImage() Clipboard获取粘贴板内容为null的解决办法

将线程启动模式设置为 sta 单线程

简介

STA:   Single-Thread   Apartment,   中文叫单线程套间。就是在COM库初始化的时候创建一个内存结构,然后让它和调用CoInitialize的线程相关联。这个内存结构针对每个线程都会有一个。支持STA的COM对象只能在创建它的线程里被使用,其它线程如果再创建它就会失败。

MTA:   Mutil-Thread   Apartment,中文叫多线程套间。COM库在进程中创建一个内存结构,这个内存结构在整个进程中只能有一个,然后让它和调用CoInitializeEx的线程相关联。支持MTA的COM对象可以在任意线程里被使用。多有针对它的调用都会被封装成为消息。

其实STA和MTA是COM规定的一套线程模型,用于保障多线程情况下你的组件代码的同步。比如说有一个COM对象它内部有一个静态变量   gHello,那么这个对象无论生成多少实例对于gHello在内存中只能有一份,那么如果有两个不同的实例在两个线程里面同时去读写它,就有可能出错,所以就要就要有种机制进行同步保护,STA或者MTA就是这种机制。

进程相对于一个小城镇,线程相当于这个城镇里的居民,STA(单线程套间)相当于居民房,是私有的,MTA(多线程套间)相当于旅馆,是公用的,Com对象相当于居民房或旅馆里的物品.接下去就好理解了,一个小城镇(进程)里可以有很多很多的(居民)线程,这个城镇(进程)只有一间旅馆(MTA),但可以有很多很多的居民房(STA).只有居民(线程)进入了房间(居民房或旅馆,STA或MTA)以后才能使用该房间里的物品(COM对象),居民房(STA)里的物品(COM对象)只能供这间房子的主人(创建该STA的线程)使用,其它居民(线程)不能访问.同样,只有入住到旅馆(MTA)里的居民(线程,可以有多个)才可以访问到旅馆(MTA)里的物品(com对象),但因为是公用的,所以要合理的分配(同步)才能不会产生混乱.

.NET支持两种线程模型:STA和MTA。
STA(single threaded apartments)。apartment只是一个逻辑上的概念,它可以包含一个或多个线程。一个AppDomain可以包括一个或多个apartment。STA是指该apartment中只能包含一个thread。
MTA(multi threaded apartments)。指该apartment中可以包含多个thread。
STA and MTA 之间最大的区别就是MTA 可以在同一个apartment 中使用所有的共享资源并发执行多个线程。 而多个STA虽然可以共享数据,但是不能并发执行线程,存在性能问题。

线程的创建:
当创建一个新的STA线程时,CLR会在该AppDomain中创建一个apartment和thread(从属于该apartment)。如果是创建MTA线程,则会CLR会检查该AppDomain是否存在一个存放MTA的apartment,如果存在仅创建该线程到该MTA中,否则就创建一个MTA和thread(从属于该apartment)。
我们可以设置线程的属性。例如 t.ApartmentState = ApartmentState.STA;

线程的使用区别:
我们应该仅仅在访问STA-based 的COM组件时才使用STA线程模式。可以在注册表的HKEY_CLASSES_ROOT\CLSID\{Class ID of the COM component} \InProcServer32 下查看到该COM的线程模式。如果该值是Apartment,则说明该COM只能以STA模式运行。其他的值有Free(MTA),Both(STA+MTA),Single(只能在一个单一的线程中执行)。
其他情况下,我们应该使用MTA的线程,虽然需要我们费心线程间资源的同步问题。

时间: 2024-11-06 11:21:39

Clipboard.GetImage() Clipboard获取粘贴板内容为null的解决办法的相关文章

React onPaste 获取粘贴板的值

React 中, 获取 粘贴板的值, 使用下面的方法 console.log(e.clipboardData.getData('Text')); 如果是 JS 中的 onpaste 事件, 则使用 var pastedText = undefined; if (window.clipboardData && window.clipboardData.getData) { // IE     pastedText = window.clipboardData.getData('Text');

phpcms发布与生成内容页面空白的解决办法

phpcms发布与生成内容页面空白的解决办法 2014/10/14 技术文章评论:暂无评论浏览: 想换个CMS来用,所以新装了几个CMS系统,最后选定了PHPCMS.倒不是因为它非常优秀,而是因帝国的那种标签不太喜欢.顺便提一下,帝国CMS的栏目自定义字段,我觉得很好,如果用来做一个分类性的栏目,分类自身的属性可以自定义字段来实现,像一些游戏网站分区就很方便了.还是转回正题,使用PHPCMS创建好栏目,正要添加内容的时候,这时问题来了,弹出的添加内容页一片空白什么也没有.网上查了一下资料,有说是

录制输入富文本框内容无脚本生成解决办法

录制输入富文本框内容无脚本生成解决办法: 1.将富文本框加入到对象库中 2.编写脚本如下 'Browser("通用呼叫中心后台").Page("通用呼叫中心后台_2").Frame("Frame").WebElement("html tag:=p").Object.innerText="nei5555r" 改行为设置富文本框内容Browser("通用呼叫中心后台").Page("

【JS】【7】获取粘贴板的内容

前言:有时会有要获取剪切板内容的情况,我最开始有这个需求,不过后面放弃了,因为有兼容性的问题,在IE可行,在chrome和firefox不行.查到这篇博客做了兼容处理,就写在这里记录一下. 正文: //绑定在了body上,也可以绑定在其他可用元素行,但是不是所有元素都支持copy和past事件. $(document.body).bind({ copy: function(e) {//copy事件 var cpTxt = "复制的数据"; var clipboardData = win

Win7剪贴板粘贴汉字显示为乱码的解决办法

http://blog.csdn.net/tanaya/article/details/8684805 最近2天发现在记事本粘贴的时候汉字都显示为乱码了,很纠结,后面发现是[区域和语言]设置中的“文本服务和输入语言”的问题:不知道什么时候默认输入语言变成了“英语(美国) - 美式键盘”,解决办法是: 修改默认输入语言为:“中文(简体,中国) - 中文(简体) - 美式键盘” 即可! 解决前的设置:                                                  

防止表格被内容撑破的解决办法总结

默认情况下,设定了表格大小,看起来没什么问题,但当表格里装了很多比表格宽度要宽的内容时就会发现表格自然的被撑大了. 第一种情况是表格被英文单词撑破了.解决办法是在表格的属性里设置style="word-wrap:break-word;" 但其实还是有问题.当往表格里装一长串的英文字母时,表格还是会被撑破.这就是第2种情况了解决办法是在表格风格属性里再加一个属性.style="word-wrap:break-word;word-break:break-all;" 但还

UiAutomatorViewer无法获取手机截图进行元素定位的解决办法

问题描述 本来想使用UIAutomatorView定位app页面元素的,最开始我使用的是夜神模拟器,打开UIAutomatorView连接模拟器没有问题,但是后来我使用真机时发现无法连接到真机获取真机的截图,具体报错信息如下 解决办法 1. 在任意盘的根目录(不是根目录也没问题)新键app.png 与app.uix 两个文件(我这里放在的E盘下面) 2. 打开CMD按照顺序执行下面的命令 adb shell uiautomator dump /sdcard/app.uix     #  把当前窗

织梦DeDeCms列表分页和内容页分页错位解决办法

文章页分页代码在这里/include/arc.archives.class.php列表页分页/include/arc.listview.class.php 很多入门的站长会碰到这样的问题,织梦的通病,下面秀站网总结了一下织梦的列表页和文章页分页问题,希望可以帮助到大家.主要修改两个文件一个是include/arc.listview.class,一个是修改CSS样式表. 第一,在CSS样式表里面添加如下代码: /*列表分页*/.page_list {padding:3px; margin: 3px

Android SDK Manager无法更新,内容显示不全的解决办法

最近在初学android开发,在更新SDK的时候遇到了麻烦. 发现Extras文件夹下为空,没有内容,包括sdk列表也不全面,更新也没有反应 解决方法: 1.在SDK Manager下Tools->Options打开了SDK Manager的Settings a.在"HTTP Proxy Server"和"HTTP Proxy Port"输入框内填入mirrors.neusoft.edu.cn和80(东软的国内镜像,速度很快,腾讯的镜像速度也挺快的.) b.选