Application.Doevents in WPF

在以往Windows Form的應用程式中,在長時間的迴圈中需要更新UI的時候,通常會下一個Application.Doevents的指令,用意是讓程式去處理訊息迴圈中相關的訊息,而在WPF中卻已經看不到這個東東了,跑哪裡去了呢?

在以往Windows Form的應用程式中,在長時間的迴圈中需要更新UI的時候,通常會下一個Application.Doevents的指令,用意是讓程式去處理訊息迴圈中相關的訊息,而在WPF中卻已經看不到這個東東了,跑哪裡去了呢?我們可以參考下面這篇
Application.DoEvents in .NET 3.0 ?
其中有一篇MSDN的相關連結,我把相關的程式碼節錄在下面
		Public Sub DoEvents()
			Dim frame As New DispatcherFrame()
			Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, New DispatcherOperationCallback(AddressOf ExitFrame), frame)
			Dispatcher.PushFrame(frame)
		End Sub

		Public Function ExitFrame(ByVal f As Object) As Object
			CType(f, DispatcherFrame).Continue = False

			Return Nothing
		End Function

或是有另一種方式,利用匯入System.Windows.Forms的命名空間來使用也是可以的。

最後;在這邊也是要提一下,水能載舟,亦能覆舟,在Doevents的使用上要小心,可以利用但是不要濫用,Doevents將控制權放出去之後,甚麼時候會再回到原先被插斷的程式碼位置,這是無法控制的;而如果程式中有過多的Doevents,程式的執行過程會相當難以預測,造成不可預期的結果的。