检测到 ContextSwitchDeadlock

错误信息



检测到 ContextSwitchDeadlock

Message: CLR 无法从 COM 上下文 0x622b440 转换为 COM 上下文 0x622b5b0,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作。这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积。要避免此问题,所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息。

引发错误的代码



该错误出现在文章:用Visual Studio 2010编写Data Url生成工具C#版

中的代码中。

关键代码行:

textBox1.Text = "<img src=\"data:image/" + ext + ";base64," + Convert.ToBase64String(ms.GetBuffer())
                + "\" width=\"" + img.Width +"\" height=\"" + img.Height +"\" />";  

主要原因:

Convert.ToBase64String(ms.GetBuffer()) 返回的字符串过长。

半调子方法



调试》异常

找到ContextSwitchDeadlock,取消勾选,确定。

为什么说是半调子方法呢?

因为这不能根本的解决问题,而只是不再引发该异常了。

出现这样的问题肯定是程序本身有问题的,应该跟踪调试确定并解决问题的根本所在。

MSDN



contextSwitchDeadlock MDA

解决方法:遵循有关 STA 消息发送的 COM 规则。

说的太笼统,根本摸不着头脑。

stackoverflow



.NET - ContextSwitchDeadlock was detected

这里回答的很好!

这样就留下一个死窗口在用户桌面上,可不是绝佳的用户体验。并且它可能有副作用,从而导致其他程序变得反应迟钝,当他们将消息发送到顶层窗口。

你需要使用线程真正解决这一问题。看看 BackgroundWorker,可以在 MSDN 库和其他许多地方找到相关文档。

现在你明白了:为什么说是半调子方法呢?

时间: 2024-10-24 14:53:27

检测到 ContextSwitchDeadlock的相关文章

Data Url生成工具C#版 第二版

为什么有第二版 ??首先感谢 jenlynn 同学的留言"DATA URL两种生成方式,C#和HTML5 两者同一张生成的base64编码貌似不一样,能有什么方法让他们达成一致吗". ??其次,在研究这个问题时发现了Bug和异常. Bug:图片编码判断问题,不管什么扩展名的都默认使用了PNG编码. 异常:检测到 ContextSwitchDeadlock 界面预览 针对相关问题的改进方法 图片编码判断问题 之前主要是忘记了获取的扩展名前面是带点.的 相关代码: string ext =

C/S端开发问题汇总

0.先推荐几款工具,连接远程客户端DameWare Mini Remote Control,搜索本地文件Everything,以及sysinternals的系列工具: FileMon-监视所有文件修改.RegMon-监视所有注册表修改.ProcessExplorer-任务管理器.ProcessMonitor-监视进程对文件+注册表的所有操作 SigCheck-识别文件头+签名+对应的pbd.TcpView-监视所有tcp连接.PsTools系列工具-操作所有本地+远程进程 1.在一些基于Serv

JavaScript数据类型检测

一.JavaScript 数据类型 1.基本数据类型(6种) Undefined Null Boolean Number String Symbol (ES6新增) 2.引用数据类型: Object 二.数据类型检测 1. typeof 可以检测除null 外的基本类型.null 和所有对象的typeof都是"object", 不能用于检测用户自定义类型. 比如Date, RegExp, Array, DOM Element的类型都是"object". var s

Android App退出检测

app的退出检测是很难的,但是获取app“要退出”的状态就容易多了,退出的瞬间并不是真的退出了,ActivityManager要销毁activity,也需要一些时间和资源的. 先见下面的运行效果:  gif做的比价粗啊, 两个activity的界面就不介绍了,主要是在APP启动的时候开启一个服务,application代码如下: public class MyApplication extends Application { @Override public void onCreate() {

状态检测防火墙原理

状态检测防火墙原理 防火墙发展到今天,虽然不断有新的技术产生,但从网络协议分层的角度,仍然可以归为以下三类: 1.包过滤防火墙: 2.基于状态检测技术(Stateful-inspection)的防火墙: 3.应用层防火墙 这三类防火墙都是向前兼容的,即基于状态检测的防火墙也有一般包过滤防火墙的功能,而基于应用层的防火墙也包括前两种防火墙的功能.由于<<浅>>文已讲了第一类防火墙,在这里我就讲讲基于状态检测技术的防火墙的实现原理. 为什么会有基于状态检测的防火墙呢?这就要先看看第一类

unity 射线检测

unity中射线检测时非常实用也经常实用的一种手段.下面讲解一下射线检测问题. 1)Ray 根据射线端点和射线的方向定义一条射线 Ray ray= new Ray(transform.position, transform.forward); 定义一个包含射线投射信息的变量RaycastHit hit,并进行射线检测Physics.SphereCast RaycastHit hit; if(Physics.SphereCast(ray,1f,out hit)) { if(hit.distance

检测和整理索引碎片

索引碎片的检测和整理 存储数据是为了查找数据,存储结构影响数据查找的性能.对无序数据进行查找,最快的查找算法是哈希查找:对有序数据进行查找,最快的查找算法是平衡树查找.在传统的关系型数据库中,聚集索引和非聚集索引都是平衡树(B-Tree)类型的存储结构,用于顺序存储数据,便于实现数据的快速查找.除了提升数据查找的性能之外,索引还能减少硬盘IO和内存消耗.通常情况下,硬盘IO是查找性能的瓶颈,由于索引是数据表的列的子集,这意味着,索引只存储部分列的数据,占用的硬盘空间比全部列少了很多,因此,数据库

检测某个方法是否属于某个类中--解析php函数method_exists()与is_callable()的区别

php函数method_exists() 与is_callable()的区别在哪?在php面相对象设计过程中,往往我们需要在调用某一个方法是否属于某一个类的时候做出判断,常用的方法有 method_exists()和is_callable() 相比之下,is_callable()函数要高级一些,它接受字符串变量形式的方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true.如果要检测类中的方法是否能被调用,可以给函数传递一个数组而不是类的方法名作为参数.数组必须包含对象或类名,以将其作

多维活体检测,让人脸识别更安全

今年的315晚会提到人脸识别领域的安全风险,主持人用现场合成的视频通过了活体检测和人脸验证,因此人脸识别的安全性引起大众关注.对于活体检测的安全隐患,腾讯优图团队一直保持高度关注,并依托多年积累的技术能力和业务运营经验,已经对人脸识别技术手段进行过多次安全升级,让人脸识别更安全. 一.目前人脸识别常见攻击手段有什么? 1 .纸片翻拍,通过打印用户的照片进行攻击: 2. 屏幕翻拍,一些3D建模技术可以驱动用户的单张照片或视频做出系统要求的摇头.张嘴.眨眼等动作: 3. 用户戴面具: 二.如何应对人