【WPF】「Timerでタイマーを作ってみました」のソースコード公開

C#入門
この記事は約4分で読めます。

前回の記事で公開した簡易Timerプログラムのソースコードをご紹介します。

WPFといいつつ、MVVMは使っておらず、WindowsFormでおなじみのイベントドリブン方式となっています。

WPFのバインド機能を使ったり、イベントハンドラに処理を記述したりしているため、プログラミングの書き方としてはあまり推奨されない書き方になっていますが、WindowsFormの技術者がWPFの便利なところを活用しつつプログラミングした結果と思っていただければ幸いです。

プログラムの概要

今回公開するTimerプログラムは以下のようなものになります。

使い方は以下の記事をご覧ください。

プロジェクト一式のダウンロード先

Visual Stuido 2019のプロジェクト一式は下記からダウンロード可能です。

XAMLのソースコード

XAML側はコメントを全く入れていないのですが、単純に必要なコントロール(テキストボックス、ラベル、コンボボックス、コンテキストメニュー、スタックパネル、グリッドなど)を張り付けているだけです。

以下のような構造になっていますので、これを念頭にXAMLを見ていただければ理解が深まるかと思います。

C#側のソースコード

C#側のコードについては、次のような構造になっています。

Timerについては、こちらの記事で紹介した関数を使っています。

一定間隔で実行させたい処理はTimerMethodというメソッドに記述していますが、カウントアップ時の処理分岐(タイマー停止、ループ、マイナスカウント、プログラム終了、任意のコマンド実行)が必要なので、その分が少しだけ複雑になっています。

また、任意のコマンド実行時に例外が発生するとプログラムが異常終了してしまいますので、それを防ぐために try~catch で例外を握りつぶしています。

構成ファイル(app.config)について

画面から変更したフォントや文字色、ダウントダウン初期値、カウントダウン後の動作などの設定情報は、app.config ファイルに保存されています。

今回の場合、プログラムフォルダに存在するMyTimer.exe.config が該当しますが、実はここを読み書きしているのではなく、 次の場所に保管されている user.config が使われます。

例えば、hoge というユーザーが MyTimerを実行した場合、以下のようになります。

では、実行ファイルが存在する MyTimer.config は削除してよいかというと、そうではありません。

これはMicrosoftの仕様のようで、プログラム起動時に MyTimer.config を必ず参照するようになっており、もし存在しなければプログラムはフリーズしたままになります。

MyTimer.config は、初回起動時に初期値を参照するだけかと思いきや、そうではありませんので、不要と判断して削除しないようにしてください。

まとめ

今回は「Timerでタイマーを作ってみました」の記事で紹介したTimerプログラムのソースコードについて紹介しました。

本来ならMVVMをつかうのが正統派なのかもしれませんが、メリットが全く感じられないので今回はC#でゴリゴリ作成しています。

私自身がWindowsFormに慣れているというものあるのですが、逆にMVVMでプログラミングされている技術者の数が圧倒的に少ないので、むしろ今回の書き方の方がシックリいく方が多いのではないかと思っています。

もし皆さんのプログラミングで何かのヒントになれば幸いです。

タイトルとURLをコピーしました