Application.DoEvents()
仅用于表单吗?
我认为此命令用于确保之前的所有命令都已处理,但现在在阅读the documentation之后,我不再确定了。
答案 0 :(得分:15)
是的,它真的针对的是Windows Forms。但是,在我看来,应该尽可能避免。
它通常被开发人员用作黑客,他们不希望将长期运行的操作置于不同的线程上......但这意味着他们会引入可能很难跟踪的重入问题向下,以及在某些时候仍然阻止UI线程(如果包含类似文件操作的内容,则无法真正预测操作是否会足够快地完成以使用户无法看到效果)。
答案 1 :(得分:3)
没有WinForms,没有标准的事件队列。 (嗯,WPF中有一个事件队列,但这只是另一个框架)。
答案 2 :(得分:3)
如果你想要实现的是等待在你的应用程序之外发生的事情(例如,要放在某个目录中的文件),可能的解决方法是 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 :(得分:2)
是的,它仅适用于Windows Forms。它在控制台或ASP.NET应用程序中没有意义,因为没有消息循环。可以使用调度程序在WPF中执行此操作,如here所示。无论如何,我建议不要使用DoEvents
,除非在快速而肮脏的应用程序中,由于Jon解释的原因。