У меня есть приложение для GUI, которое соединяется с датчиком, собирает данные и обрабатывает их в фоновом режиме использование BackgroundWorker
потоки.
Как есть Я отправляю данные на GUI с помощью ProgressChanged
который, казалось, работал хорошо для начала. Я с тех пор повысил скорости передачи данных и обнаружил проблему; если программное обеспечение оставляют работать в течение нескольких минут, объем использования процессора, кажется, растет, пока это не достигает близких 100% на обоих ядрах на моей машине и в той точке, я получаю ошибку, которая читает:
Управляемая Отладка Помощника 'DisconnectedContext' обнаружила проблему в 'myapp.exe'. Дополнительная информация: Контекст 0xe2ba0 разъединяется. Выпуск интерфейсов от текущего контекста (контекст 0xe2d10). Это может вызвать потеря данных или повреждение.
Я считал некоторый материал вокруг сети, которая предполагает, что это может произойти, если приложение для GUI не может накачать сообщения достаточно быстро. Я заметил, что могу побудить тот же катастрофический отказ происходить быстрее, если я изменяю размер окна быстро (т.е. накачайте загрузку больше сообщений), который поддерживает теорию, я думаю?
Таким образом, вопросы здесь:
Любой совет был бы очень с благодарностью получен.
Это звучит как очень специфическая проблема, и я думаю, поэтому никто еще не ответил, но я думаю, что могу помочь по вопросу №3.
Spy ++ должен видеть сообщения, идущие в ваше окно. Я думаю, вы могли бы использовать его, чтобы наблюдать, как сообщения перекачиваются в ваш графический интерфейс, и выполнять тест на изменение размера. Если вы заметили значительное увеличение количества сообщений, пытающихся обработать, это может подтвердить вашу гипотезу.
Кстати, я читал, что вы могли бы изменить квартиру основного потока со STAThread на MTAThread, чтобы убрать этот MDA.
Возможно, вы можете изменить свое приложение, чтобы вывести показания датчика в файл или поставить их в очередь в другом механизме вместо постоянного обновления графического интерфейса. HTH.