如何调试和解决'DisconnectedContext'崩溃?

时间:2010-01-12 12:08:35

标签: debugging crash c++-cli

我有一个GUI应用程序连接到传感器,收集数据并使用BackgroundWorker线程在后台处理它。

目前我正在使用ProgressChanged将数据发布到GUI,这似乎一开始就运作良好。我已经提高了数据速率并发现了一个问题;如果软件运行几分钟,处理器使用量似乎会增加,直到它在我的机器上的两个核心上达到接近100%,并且在那时,我得到一个错误,其中显示:

  

托管调试助手'DisconnectedContext'检测到'myapp.exe'中存在问题。附加信息:上下文0xe2ba0已断开连接。从当前上下文释放接口(上下文0xe2d10)。这可能会导致损坏或数据丢失。

我已经阅读了网络上的一些内容,这表明如果GUI应用无法足够快地提取消息,就会发生这种情况。我注意到如果我快速调整窗口大小(即加载更多消息),我可以引发相同的崩溃更快发生,这支持我认为的理论?

所以这里的问题是:

  1. 是否有人同意我关于消息抽吸的假设?
  2. 是否有其他解释?
  3. 我有什么方法可以证明它(可能会查看队列中的消息数量)?
  4. 这些都是不好的代码气味,这表明我的方式错了吗?
  5. 非常感谢任何建议。

1 个答案:

答案 0 :(得分:3)

这种听起来像是一个非常具体的问题,我认为这就是为什么还没有人回答,但我想我可以在问题#3上提供帮助。

Spy++应该能够看到发送到您窗口的消息。我认为您可以使用它来观察消息到您的GUI并进行调整大小测试。如果您看到尝试处理的消息大量增加,则可能会确认您的假设。

顺便说一句,我已经读过你可以将主线程公寓从STAThread更改为MTAThread以使这个MDA消失。

Perphaps您可以修改您的应用程序,将传感器读数吐出到文件或以不同的机制排队,而不是不断更新GUI。 HTH。