[VB.NET][WPF] WPF で 描画を更新する

2013年11月10日

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






カテゴリー: Program, WPF, xaml

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org