Application.Doevents in 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,程式的執行過程會相當難以預測,造成不可預期的結果的。

留言

這個網誌中的熱門文章

開啟cshtml檔案時,出現『並未將物件參考設定為物件執行個體』的錯誤訊息

無法設定中斷點 尚未載入符號檔

DataGridView欄位計算總合