是Application.DoEvents()
只是表單?Application.DoEvents()僅適用於WinForms嗎?
我認爲這個命令是用來確保所有的命令都是在處理之前,但現在在讀the documentation之後,我不再確定了。
是Application.DoEvents()
只是表單?Application.DoEvents()僅適用於WinForms嗎?
我認爲這個命令是用來確保所有的命令都是在處理之前,但現在在讀the documentation之後,我不再確定了。
是的,它確實針對Windows Forms。但是,我認爲應儘可能避免。
它通常被開發人員用作黑客,他們不希望將長時間運行放在不同的線程上,但這意味着他們正在引入重入問題,這很難追蹤,以及在一段時間內仍然阻塞UI線程(如果這包括諸如文件操作之類的東西,則無法真正預測操作是否會足夠快地完成,以至於沒有用戶可見的效果)。
+1000,不僅僅在你看來。根本沒有理由使用它。 – 2011-02-12 11:14:54
沒有WinForms,沒有標準的事件隊列。 (好吧,WPF中有一個事件隊列,但這只是另一個框架)。
是的,它只適用於Windows窗體。它在控制檯或ASP.NET應用程序中沒有意義,因爲沒有消息循環。可以使用調度程序在WPF中執行此操作,如here所示。無論如何,我不會推薦使用DoEvents
,除了可能在快速和骯髒的應用程序,由於Jon解釋的原因。
如果你要實現的目標是在等待着什麼,以你的應用程序之外發生(例如,在某個目錄被丟棄的文件),可能的解決方法將是定時器類System.Timers的命名空間。
一個例子(基於MSDN):在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
更多信息:http://msdn.microsoft.com/en-us/library/system.timers.timer%28v=vs.71%29.aspx
你真的不應該以往任何時候都需要使用`Application.DoEvents`。你想解決什麼問題?也許有人可以提出一個更好的方法。 – 2011-02-12 11:12:21
這不僅僅是「DoEvents」。這是整個班級。這就是爲什麼它是`System.Windows.Forms.Application` ... – Timwi 2011-02-12 11:54:47