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

Jon*_*age 6 crash debugging c++-cli

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

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

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

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

所以这里的问题是:

  1. 是否有人同意我关于消息抽吸的假设?
  2. 是否有另一种解释?
  3. 有什么方法可以证明它(可能会查看队列中的消息数量)?
  4. 这些都是不好的代码气味,这表明我的方式是错误的吗?

非常感谢任何建议.

cmw*_*cmw 3

这听起来像是一个非常具体的问题,我认为这就是为什么还没有人回答的原因,但我认为我可以帮助解决问题#3。

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

顺便说一句,我读到您也许可以将主线程单元从 STAThread 更改为 MTAThread 以使此 MDA 消失。

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