Application.DoEvents () только для WinForms? - PullRequest
7 голосов
/ 12 февраля 2011

Является ли Application.DoEvents() только для форм?

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

Ответы [ 4 ]

15 голосов
/ 12 февраля 2011

Да, он действительно предназначен для Windows Forms. Однако, по моему мнению, этого следует избегать, где это возможно.

Обычно его используют как взлом разработчики, которые не хотят возиться с длительными операциями в другом потоке ... но это означает, что у них возникают проблемы с повторным входом, которые очень сложно отследить не работает, а также все еще блокирует поток пользовательского интерфейса в течение некоторого времени (и если это включает в себя что-то вроде файловой операции, вы не можете предсказать, будет ли операция завершена достаточно быстро, чтобы не иметь видимого для пользователя эффекта).

3 голосов
/ 08 ноября 2012

Если вы пытаетесь достичь чего-то, что происходит за пределами вашего приложения (например, файл, который будет удален в определенную директорию), возможный обходной путь - Timer класс System.Timers пространство имен.

Пример (на основе MSDN):

Private Sub SetTimer()
    Dim aTimer As New System.Timers.Timer
    AddHandler aTimer.Elapsed, AddressOf OnTimedEvent
    aTimer.Interval = 5000
    aTimer.Enabled = True

    Console.WriteLine("Press q to exit")
    While Console.Read <> Asc("q")
    End While
End Sub

Private Sub OnTimedEvent(ByVal source As Object, ByVal e As ElapsedEventArgs)
    'Do the job here
    Console.WriteLine("HELLO WORLD!")
    'Don't forget to disable the timer if you don't need it anymore
    'Source.Enabled = False
End Sub

Больше информации на MSDN: http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.71%29.aspx

3 голосов
/ 12 февраля 2011

Без WinForms нет стандартной очереди событий. (Ну, в WPF есть очередь событий, но это просто еще один фреймворк).

2 голосов
/ 12 февраля 2011

Да, это только для Windows Forms.Это не имеет смысла в консоли или приложении ASP.NET, потому что нет цикла сообщений.Это можно сделать в WPF, используя диспетчер, как показано здесь .В любом случае, я бы не рекомендовал использовать DoEvents, за исключением, возможно, быстрого и грязного приложения по причинам, объясненным Джоном.

...