我有一个GUI应用程序,它连接到传感器,收集数据并使用BackgroundWorker
线程在后台处理它。如何调试和解决'DisconnectedContext'崩溃?
现在,我使用ProgressChanged
将数据发布到GUI,这似乎很适合开始使用。自从我提高了数据速率并发现了一个问题,如果软件运行几分钟,处理器使用量似乎会逐渐增加,直到在我的计算机上的两个内核上达到接近100%,然后出现如下错误:
托管调试助手'DisconnectedContext'在'myapp.exe'中检测到问题。其他信息:上下文0xe2ba0已断开连接。从当前上下文释放接口(上下文0xe2d10)。这可能会导致损坏或数据丢失。
我读过一些网络上的东西,这表明如果GUI应用程序无法足够快地抽取消息,就会发生这种情况。我注意到,如果我迅速调整窗口的大小(即抽取更多的消息来支持我所认为的理论),我可以激起同样的崩溃发生得更快。
所以这里的问题是:
- 是否有人与我有关消息抽的假设一致?
- 是否有其他解释?
- 有什么方法可以证明它(查看队列中的消息数量)?
- 这些都是不好的代码味道,这表明我正在做这个错误的方式吗?
任何意见将非常感激地收到。
我尝试了MTATHread设置,它似乎只是偶尔会导致崩溃。我已经采用了queuenig机制,并且在显示代码的一部分中发现了一个错误,该代码过度填充了“RichTextBoxControl”。在这两者之间,看起来我已经解决了这个问题。感谢您的建议。 – 2010-02-09 13:09:16
我已经看到这种情况再次发生了几次,它肯定是通过尝试从数据生产者线程向其侦听器发送太多'ProgressChanged'请求触发的。 – 2010-02-17 15:10:23