【问题标题】:DisconnectedContext/ContextSwitchDeadlock was detected检测到 DisconnectedContext/ContextSwitchDeadlock
【发布时间】:2011-05-11 07:29:59
【问题描述】:

我有 RichTextBox,我从多线程记录大量消息。 一段时间后,我第一次收到“检测到 DisconnectedContext”消息,并从 Debug->Exceptions... 窗口中删除了异常中断。但后来我收到“检测到 ContextSwitchDeadlock”。我也删除了它,用户界面恢复了活力。 过了一段时间又结冰了。

有没有办法防止这种情况发生?或者是否有支持着色、更改字体以在 .NET 中提供视觉反馈的组件,如 RichTextBox 但没有此错误?

检测到 ContextSwitchDeadlock
消息:CLR 无法 从 COM 上下文 0x6eb0760 转换 到 COM 上下文 0x6eb08d0 为 60 秒。拥有的线程 目的地环境/公寓是最 可能要么做一个非抽水等待 或处理很长时间的运行 无抽水操作 Windows 消息。这种情况一般有 负面的性能影响,并可能 甚至导致应用程序变成 无响应或内存使用 随着时间的推移不断积累。到 避免这个问题,全单 线程单元 (STA) 线程 应该使用抽水等待原语 (例如 CoWaitForMultipleHandles)和 在很长一段时间内定期发送消息 运行操作。

【问题讨论】:

    标签: c# winforms multithreading events logging


    【解决方案1】:

    您确定要从多个线程更新 RichTextBox 吗?如果是这样,您最好停止它并使用 UI 线程来更新 RTB。为此:致电theForm.BeginInvoke( delegate to a method that updates the RTB)

    这应该允许所有并发线程尽快继续,而无需等待响应。

    【讨论】:

    • 您只能从 UI 线程更新 UI 元素,因此,显然,这不是问题。我有同样的问题,我通过读取线程设置的一些变量,从 UI 线程定期更新我使用的文本框。此消息不断出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多