Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is Application.DoEvents() just for WinForms?

Is Application.DoEvents() just for forms?

I thought that this command was used to ensure that all of the commands before are processed but now after reading the documentation, I'm not sure anymore.

like image 557
Jaime Oro Avatar asked Feb 12 '11 11:02

Jaime Oro


4 Answers

Yes, it's really aimed at Windows Forms. However, in my view it should be avoided where possible.

It's usually used as a hack by developers who don't want to be bothered with putting long-running operations on a different thread... but that means they're introducing re-entrancy issues which can be very hard to track down, as well as still blocking the UI thread for some of the time (and if that includes something like a file operation, you can't really predict whether the operation will complete quickly enough to not have a user visible effect).

like image 184
Jon Skeet Avatar answered Oct 19 '22 11:10

Jon Skeet


Without WinForms, there is no standard event queue. (Well, there is an event queue in WPF, but this is just another framework).

like image 37
Vlad Avatar answered Oct 19 '22 10:10

Vlad


If what you are trying to achieve is waiting for something to happen outside your application (eg. a file to be dropped in a certain directory), a possible workaround would be the Timer class of the System.Timers namespace.

An example (based on 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

More info at MSDN: http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.71%29.aspx

like image 3
show Avatar answered Oct 19 '22 10:10

show


Yes, it's only for Windows Forms. It wouldn't make sense in a console or ASP.NET application, because there is no message loop. It is possible to do it in WPF, using the dispatcher, as shown here. Anyway, I wouldn't recommend using DoEvents except perhaps in a quick and dirty application, for the reasons explained by Jon.

like image 2
Thomas Levesque Avatar answered Oct 19 '22 11:10

Thomas Levesque