VB のたまご

作成日: 2017/03/06, 更新日: 2017/03/06



DispatcherTimer

    イメージ
  •  DispatcherTimer は、UI スレッドで処理できるタイマーイベントを扱えるコンポーネントです。 とりあえずどういう風に動くのか見てみましょう。 以下サンプルです。「DispatcherTimerWindow1」という画面で作成していますが、「MainWindow」に書いても構いません。

  • スポンサーリンク


    <Window x:Class="DispatcherTimerWindow1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:w04_NormalControls"
            mc:Ignorable="d"
            Title="DispatcherTimerWindow1" Height="300" Width="300"
            Loaded="Window_Loaded" 
            Closing="Window_Closing">
      
        <Grid>
    
            <TextBlock Name="textblock1" />
    
        </Grid>
        
    </Window>
    

    Imports System.Windows.Threading
    
    Public Class DispatcherTimerWindow1
    
        Private timer1 As DispatcherTimer = Nothing
    
        Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs)
    
            Me.timer1 = New DispatcherTimer
            Me.timer1.Interval = TimeSpan.FromSeconds(1)
            AddHandler Me.timer1.Tick, AddressOf Me.DispatcherTimer_Tick
    
            Console.WriteLine($"実行前: {Me.timer1.IsEnabled}")
            Me.timer1.Start()
            Console.WriteLine($"実行後: {Me.timer1.IsEnabled}")
    
        End Sub
    
        Private Sub DispatcherTimer_Tick(sender As Object, e As EventArgs)
    
            Me.textblock1.Text = DateTime.Now.ToString()
    
        End Sub
    
        ' 自分で用意したイベントは、自分で破棄する派なので
        Private Sub Window_Closing(sender As Object, e As ComponentModel.CancelEventArgs)
    
            If Me.timer1 IsNot Nothing Then
                Me.timer1.Stop()
                RemoveHandler Me.timer1.Tick, AddressOf Me.DispatcherTimer_Tick
            End If
    
        End Sub
    
    End Class
    

  •  WinForms の時は、画面に Timer コンポーネントを配置して扱っていましたが、WPF ではプログラム上から扱うのが一般的です。 System.Windows.Threading 名前空間にある DispatcherTimer コンポーネントを使います。 画面ロード時(のイベント処理内)に、タイマーイベントの処理を準備しています。 イベント発行間隔を設定する Interval プロパティには、TimeSpan 型の値をセットします。ここでは1秒を指定しているので、1秒間隔で発生するようになります。

  •  実行すると、1秒おきに現在時刻が更新されることが分かると思います。