Существует три категории сообщений Windows, которые отправляются с помощью цикла сообщений и вызова Application.DoEvents (). Сначала идут сообщения, которые отправляются с помощью SendMessage (). Они важны, их нужно отправлять сразу, потому что есть какая-то другая программа, ожидающая результата вызова SendMessage (). Они не помещаются в очередь сообщений, Windows напрямую вызывает оконную процедуру.
Тогда есть сообщения, которые помещаются в очередь сообщений с помощью PostMessage (). Они могут ждать, они просто уведомления. Все сообщения клавиатуры и мыши соответствуют этой категории.
Далее идут сообщения с низким приоритетом, WM_TIMER и WM_PAINT. Они отправляются только тогда, когда больше ничего не нужно делать, SendMessage не ожидает и очередь сообщений пуста.
Звучит так, будто вы оказались в ситуации, когда вы так сильно голодали Windows, что не могли больше отправлять эти сообщения с низким приоритетом. Вероятно, больше не получит ни таймеров, ни событий Paint. Вызов DoEvents только раз в секунду, безусловно, сделает это. Это плохо, ваша программа теперь влияет на работу других программ. Вы должны это исправить. Сделайте это, изменив архитектуру вашего приложения, чтобы вы больше не зависели от DoEvents.