Я работаю над унаследованным приложением, в котором есть sprinklings Application.DoEvents здесь и там. Я полностью осознаю, что это недооценивается из-за проблем с повторным подключением, но повторный факторинг в настоящее время не является вариантом.Application.DoEvents никогда не выходит
Возникла проблема, когда DoEvents никогда не выходит. Пользовательский интерфейс реагирует (я вижу активность потоков пользовательского интерфейса в пользовательских журналах), поэтому DoEvents, похоже, накачивает сообщения, но по какой-то причине он никогда не завершается. К сожалению, этот DoEvents находится в основном компоненте обработки данных, что означает, что это прекращает обработку ответов сервера сервера, поскольку он застрял на линии DoEvents.
У нас есть трассировка секундомера, в которой указывается, как долго работали DoEvents. У меня есть журнал, в котором говорится, что он работает в течение 188267770 миллисекунд, что составляет 52 часа (глоток). Казалось, что он попал в это состояние примерно в 3 часа ночи в субботу, пока пользователь не пришел в понедельник и не закрыл приложение (не убивая процесс, я вижу, что трассировка потока графического интерфейса заканчивается изящно), после чего DoEvents завершает и данные таймера регистрируются (так что что-то, что происходит во время выключения, должно убедить DoEvents завершить).
Конечно, это происходит только на машинах пользователя производственное, а не на моем Dev поле :)
Кто-нибудь когда-нибудь видел подобную проблему к этому?
Я декомпилировал DoEvents, а также как Conrol.BeginInvoke отсылает делегаты метода к потоку GUI с помощью очереди сообщений Windows, но я не вижу, как DoEvents может застрять как это, и поддерживать пользовательский интерфейс в ответном режиме.
Исходный контроль diff также не является опцией, так как существует около 30 версий с последней «хорошей» версии, имевшейся у пользователей, и эта новая версия с проблемой - примерно 200 файлов изменились.
Большое спасибо Paul
Не используйте 'DoEvents' [см. Это] (http://blog.codinghorror.com/is-doevents-evil) – SimpleVar
Это одна замечательная история .. у нее есть сюжет и персонажи - где код? –
Я бы предложил зарегистрировать код «основной компонент обработки данных» и просмотреть журнал, чтобы увидеть длинный список, который является вашей проблемой. Это может помочь вам определить характер проблемы. – SimpleVar