检测到DisconnectedContext / ContextSwitchDeadlock

时间:2011-05-11 07:29:59

标签: c# winforms multithreading events logging

我有RichTextBox,我从多线程做重信息记录。 一段时间后,我第一次收到“检测到DisconnectedContext”消息,并从Debug-> Exceptions ...窗口中删除了异常中断。但后来我收到“检测到ContextSwitchDeadlock”。我也删除了这个,UI恢复了生机。 过了一段时间它再次冻结。

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

  

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

在搜索了一下后,我发现答案here是解决这个问题的方法