WPF アプリケーションの場合、Application.DoEvents() が標準では呼び出せない(*1)ので別の方法を検討する必要があります。
具体的には、DoEvents したい箇所で、.Dispatcher.Invoke を DispatcherPriority.Render を指定して、空の処理を呼ぶだけでよいです。
Imports System.Windows.Threading Imports System.ComponentModel Class MainWindow Implements ComponentModel.INotifyPropertyChanged Public Property A As String ' ← これを xaml 側で Binding する Private Sub Button_Click(sender As Object, e As RoutedEventArgs) For i = 1 To 10 ' 更新処理 A = Now.ToString RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("")) ' DoEvents Me.Dispatcher.Invoke(DispatcherPriority.Render, Sub() ' 処理はなし End Sub) System.Threading.Thread.Sleep(1000) Next End Sub Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded Me.DataContext = Me End Sub
DoEvents よりもコード量が多いのでいまひとつな感じもありますが、DoEvents だとボタンクリックとかの処理が割り込んで疑似マルチスレッド状態になることを考えると、この方法は結構妥当な気がしています。
(*1)
System.Windows.Forms を参照設定し、System.Windows.Forms.Application.DoEvents() を呼べばいける、という話もないわけではない…