У меня есть приложение с графическим интерфейсом, которое подключается к датчику, собирает данные и обрабатывает их в фоновом режиме, используя потоки BackgroundWorker
.
В настоящее время я публикую данные в графическом интерфейсе с помощью ProgressChanged
, который с самого начала работал хорошо. С тех пор я увеличил скорость передачи данных и обнаружил проблему; если программное обеспечение оставлено для работы на несколько минут, объем использования процессора, по-видимому, увеличивается, пока не достигнет почти 100% на обоих ядрах на моем компьютере, и в этот момент я получаю сообщение об ошибке:
Помощник по управляемой отладке «DisconnectedContext» обнаружил проблему в «myapp.exe». Дополнительная информация: Контекст 0xe2ba0 отключен. Освобождение интерфейсов из текущего контекста (контекст 0xe2d10). Это может привести к повреждению или потере данных.
Я читал кое-что в интернете, что говорит о том, что это может произойти, если приложение с графическим интерфейсом не может качать сообщения достаточно быстро. Я заметил, что я могу спровоцировать тот же сбой, который произойдет быстрее, если я быстро изменю размер окна (т.е. добавлю больше сообщений), что поддерживает теорию, я думаю?
Итак, вопросы здесь:
- Согласен ли кто-нибудь с моей гипотезой о прокачке сообщений?
- Есть ли другое объяснение?
- Есть ли способ, которым я могу это доказать (возможно, посмотреть количество сообщений в очереди)?
- Неужели все эти неприятные запахи кода указывают на то, что я поступаю неправильно?
Любой совет будет принят с благодарностью.