检测到断开连接的上下文/上下文切换死锁
本文关键字:上下文切换 死锁 上下文 断开 连接 检测 | 更新日期: 2023-09-27 17:55:54
我有RichTextBox,我从多线程进行繁重的消息记录。一段时间后,我第一次收到"检测到断开连接的上下文"消息,我从调试>异常中删除了异常中断...窗。但后来我收到了"检测到ContextSwitchDeadlock"。我也删除了它,UI 恢复了生机。过了一会儿,它又冻结了。
有没有办法防止这种情况?或者是否有一个组件支持着色,更改字体以在 .NET 中提供视觉反馈,如 RichTextBox,但没有此错误?
检测到
上下文切换死锁 消息:CLR 无法 从 COM 上下文0x6eb0760转换 到 COM 上下文0x6eb08d0 60 秒。拥有 目的地环境/公寓是最多的 可能要么进行非泵送等待 或处理运行时间很长 无需泵送窗口即可操作 消息。这种情况一般有 对性能产生负面影响,并可能 甚至导致应用程序成为 无响应或内存使用量 随着时间的推移不断积累。自 避免此问题,全部单身 螺纹单元 (STA) 螺纹 应该使用抽水等待原语 (例如 CoWaitForMultipleHandles)和 在长时间内定期泵送消息 正在运行的操作。
您确定要从多个线程更新 RichTextBox 吗?如果是这样,您最好停止它并使用 UI 线程来更新 RTB。为此:致电theForm.BeginInvoke( delegate to a method that updates the RTB)
这应该允许所有并发线程尽快继续,而无需等待响应。