我有RichTextBox,我从多线程做重信息记录。 一段时间后,我第一次收到“检测到DisconnectedContext”消息,并从Debug-> Exceptions ...窗口中删除了异常中断。但后来我收到“检测到ContextSwitchDeadlock”。我也删除了这个,UI恢复了生机。 过了一段时间它再次冻结。
有没有办法防止这种情况发生?或者是否有一个支持着色的组件,更改字体以在.NET中提供可视反馈,如RichTextBox但没有此错误?
检测到ContextSwitchDeadlock
消息: CLR无法执行此操作 从COM上下文0x6eb0760转换 到COM上下文0x6eb08d0为60 秒。拥有的线程 目的地环境/公寓是最多的 可能要么做一次非抽水等待 或者处理很长时间 没有泵Windows的操作 消息。这种情况一般都有 负面的业绩影响和可能 甚至导致应用程序成为 无响应或内存使用 随着时间的推移不断积累。至 一切都避免这个问题 线程公寓(STA)线程 应该使用抽等待原语 (例如CoWaitForMultipleHandles)和 经常在长时间内发送消息 正在运行。
答案 0 :(得分:2)
您确定要从多个线程更新RichTextBox吗?如果是这样,你最好停止它并使用UI线程来更新RTB。为此:致电theForm.BeginInvoke( delegate to a method that updates the RTB)
这应该允许所有并发线程尽快继续而不等待响应。
答案 1 :(得分:0)
在搜索了一下后,我发现答案here是解决这个问题的方法