Экран не полностью обновлен до того, как функция оставлена - PullRequest
0 голосов
/ 22 марта 2012

У меня есть проблема, которая в некотором роде скорее любопытство, чем ошибка, хотя кое-что я бы очень хотел исправить.

У меня есть панель в C # Winform, которая имеет графическое представление приблизительно 100устройства, представленные кнопками с растровыми изображениями на них.

При запуске программное обеспечение сканирует шину RS485 и создает эти устройства на экране.

К сожалению, я заметил, что ближе к концуфункция сканирования, при которой устройства перестают появляться так быстро, а затем кажется, что они заикаются, и все они появляются.

Я догадываюсь, что функция сканирования завершена, вернулась к своему вызывающему, который перешел кдругая функция, которая теперь занимает процессорное время, забирая ресурсы у потока пользовательского интерфейса.

Просто интересно, есть ли у кого-нибудь идеи, как я могу предотвратить возврат программного обеспечения из функции сканирования до полного обновления экрана.

Любые мысли / советы очень приветствуются.

TХэнкё,

Дэвид

1 Ответ

1 голос
/ 22 марта 2012

Похоже, что во время сканирования вы создаете кнопки так, как вы их находите. Вместо этого выполните сканирование, сохраните данные, и после завершения сканирования затем начните рисовать кнопки.

В идеале, сканируйте в потоке BackgroundWorker и сохраняйте устройства RS485, которые вы найдете в каком-либо списке, например List<IRS485Device>, все время, пока запускаются события ProgressChanged , чтобы обновить индикатор прогресса на вашей панели. Когда RunWorkerCompleted достигнут, вы можете удалить индикатор прогресса со своей панели, а затем вызвать программу, которая рисует кнопки из всех данных, обнаруженных вами при сканировании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...