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() を呼べばいける、という話もないわけではない…