7

只是Application.DoEvents()为了表格?

我以为这个命令是用来确保之前的所有命令都被处理但现在在阅读文档之后,我不确定了。

4

4 回答 4

15

是的,它确实针对 Windows 窗体。但是,在我看来,应该尽可能避免。

它通常被那些不想为将长时间运行的操作放在不同线程上而烦恼的开发人员用作一种黑客攻击......但这意味着他们正在引入可能很难追踪的重入问题,因为并且在某些时候仍会阻塞 UI 线程(如果这包括文件操作之类的东西,您无法真正预测该操作是否会足够快地完成而不会产生用户可见的效果)。

于 2011-02-12T11:12:12.887 回答
3

没有 WinForms,就没有标准的事件队列。(嗯,WPF 中有一个事件队列,但这只是另一个框架)。

于 2011-02-12T11:12:31.633 回答
3

如果您要实现的目标是等待应用程序外部发生某些事情(例如,将文件放在某个目录中),则可能的解决方法是System.Timers命名空间的Timer类。

一个例子(基于 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

于 2012-11-08T09:40:56.360 回答
2

是的,它仅适用于 Windows 窗体。这在控制台或 ASP.NET 应用程序中没有意义,因为没有消息循环。可以使用调度程序在 WPF 中执行此操作,如此处所示。无论如何,出于 Jon 解释的原因,我不建议DoEvents在快速而肮脏的应用程序中使用 except。

于 2011-02-12T11:17:38.330 回答