プログラミング演習Ⅲ(2023)

【WPF練習13】図形描画と定期処理(6/7)

プロジェクトタイプC# WPFアプリケーション※
プロジェクト名T10a
ソリューション名PET10
ターゲットフレームワーク.NET 6.0 (長期的なサポート)

※ 「WPFアプリ(.NET Framework)」ではないので注意せよ!

注意
  • 本ページの作業内容は 前のページまでの続き になっていることに注意せよ.
    • 先に前のページまでをすべて読み,指示されている作業を済ませてから本ページを読むこと.
    • プロジェクトの作成作業については準備を参照せよ.

13-6. WPFにおける定期処理

次にWPFにおける定期処理,つまり 一定時間おきに同じ処理を繰り返す 方法を紹介しよう. このためには DispatcherTimer(でぃすぱっちゃー・たいまー) を用いる.これはボタンのような部品ではなくコードビハインド上で用いるクラスである. このクラスはいくつかのメソッドやプロパティを持つが特に重要なものを_に示す.

DispatcherTimerクラスのメソッド/プロパティ(一部)
名前備考
.Start(すたーと)() メソッド-定期処理を開始する.
.Stop(すとっぷ)() メソッド-定期処理を停止する.
.Interval(いんたーばる)プロパティTimeSpan構造体1処理を行う間隔を指定する.
.Tick(てぃっく)イベントイベントハンドラ行う処理内容.
.IsEnabled(いず・いねーぶるど)プロパティbool定期処理が実行中であるかどうか(実行中の場合はtrue).

コード内でDispatcherTimerクラスのインスタンスを作成し,.Tickイベントに処理内容を設定して.Start()メソッドを呼び出せば 処理が開始される.この処理は以前に説明したTask.Run()メソッドなどによる非同期処理とは異なりメインスレッドで実行されるので,部品の操作なども直接行うことが可能である.

今回はこれを試すため,リスト13-5-5で追加したラベルlabel1の文言を一定時間おきに変更することを試みてみよう. まずMainWindow.xaml.csファイルの冒頭に_に示すusingディレクティブを追記する.

追記するusingディレクティブ
1
using System.Windows.Threading;

そしてMainWindowクラスに_に示す内容を追記しよう. Timer_Tick()メソッドの定義は,11行目の+=を打ち込んだ後に タブキーを押せば生成される ので,その中に19~23行目の内容を追記しよう.

MainWindow.xaml.csの追記内容
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public partial class MainWindow : Window
{    
    private DispatcherTimer timer; // 追記

    public MainWindow()
    {
        InitializeComponent();

        timer = new DispatcherTimer();          // タイマーを生成する.
        timer.Interval = new TimeSpan(0, 0, 1); // 1秒ごとに作動させる.
        timer.Tick += Timer_Tick;               // ※ Timer_Tickはサジェストを使って生成すること!
        
        timer.Start(); // 定期処理を開始する.
    }
  
    // タイマー処理(自動生成)
    private void Timer_Tick(object sender, EventArgs e)
    {
        // 現在時刻を取得する.
        DateTime now = DateTime.Now; 

        // ↑の時刻をラベルで表示する.
        label1.Content = $"{now:HH:mm:ss}";
    }    
    
    // (..中略..)

ここまで書けたら起動してみよう._に示すようにラベルの文言が 定期的に更新されて,デジタル時計のような表示が作られていることが分かるだろう. 次節ではこのDispatcherTimerを応用して,キャンバス内の図形をアニメーションさせることを試みる

作業結果
Last updated on 2024-01-09
Published on 2024-01-09

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.