Windows поддерживает очередь для хранения различных событий, таких как щелчок, изменение размера, закрытие и т. Д. Пока элемент управления отвечает на событие, все остальные события удерживаются в очереди. Таким образом, если ваше приложение обрабатывает нажатие кнопки слишком долго, остальная часть приложения может зависнуть. Следовательно, возможно, что ваше приложение не отвечает на запросы, когда оно выполняет тяжелую обработку в ответ на событие. Хотя в идеале вам следует выполнять тяжелую обработку асинхронно, чтобы гарантировать, что пользовательский интерфейс не зависает, быстрое и простое решение состоит в том, чтобы просто периодически вызывать Application.DoEvents (), чтобы разрешить отправку ожидающих событий в ваше приложение.
Для хорошего Windows-приложения конечному пользователю не нравится, когда какая-либо форма приложения «зависает» при выполнении более крупной или тяжелой операции. Пользователь всегда хочет, чтобы приложение работало гладко и быстро, а не зависало. Но после поиска в Google я обнаружил, что Application.DoEvents () не рекомендуется использовать в приложениях чаще, поэтому вместо этого лучше использовать BackGround Worker Thread для выполнения длительных задач без зависания окон.
Вы можете получить лучшую идею, если вы посмотрите практически. Просто скопируйте следующий код и проверьте приложение с приложением Application.DoEvents () и без него.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For i As Integer = 0 To 1000
System.Threading.Thread.Sleep(100)
ListBox1.Items.Add(i.ToString())
Application.DoEvents()
Next
End Sub