Windows 8 Developers

Windowsストアアプリ開発とかその他もろもろのブログ。

※参加自由なWindows8開発コミュニティをFacebookグループでやってます。
https://www.facebook.com/groups/win8.developers/

その他、技術情報リンク集を下記にまとめています。
http://windows8-developers.hatenablog.com/entry/2013/02/20/155410


C#でのタイマー実装

C#におけるtimerの実装についてです。

今回はハッカソンvol.1にて田中さんが作ったパズルゲームに使われているタイマー処理をそのまま共有します!!

まずタイマーのイメージですが、こんな感じです。

f:id:win8dev:20121123183211j:plain

「経過時間」と表示されている部分ですね。

これが実際に毎秒カウントされる形になります。気になるコードは下記の通り。

■タイマーの実装

タイマーとして DispatcherTimer を使用すると時間の表示などを行うのに便利です。


       
privateDispatcherTimer timer;
       
privateDateTime startTime;

       
privatevoid startProcess()
       
{
            startTime
=DateTime.Now;
       
}

       
// タイマーを設定するためのメソッド(初期処理などで呼びます)
       
privatevoid setTimer()
       
{
            timer
=newDispatcherTimer();

           
// 下のTickで指定した処理を行う間隔を指定します。(下の例は1秒間隔)
            timer
.Interval=newTimeSpan(0,0,1);

           
// onTimerメソッドをIntervalで指定した間隔(上の例では1秒間隔)で行う処理として設定します。
            timer
.Tick+= onTimer;
       
}

       
// Intervalで指定した間隔で呼ばれる処理
       
privatevoid onTimer(object sender,object e)
       
{
           
// 現在時間取得
           
DateTime now =DateTime.Now;

           
// 開始時間と現在時間の差分を取得
           
TimeSpan timeSpan = now.Subtract(startTime);

           
// TextBlockなどに差分の時間を表示
           
string timeText =string.Format("{0:00}:{1:00}:{2:00}", timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds);
            time
.Text= timeText;
       
}

       
// タイマーの開始(ボタンのイベントなどで呼びます)
       
private vid onStart()
       
{
           
// DispatcherTimerを開始します。(止めるときは、Stop()メソッドを使います。)
            timer
.Start();
       
}

       
privatevoid onStop()
       
{
            timer
.Stop();
       
}

※コードはwin8devメンバーの田中さん提供

今回は画面表示を元にしていますが、別スレッドでの時間カウントが必要な場合にも表示部分を抜いて変数で判断すればそのまま使えます。

 

メトロのアプリはデスクトップと表示が切り離されるのでこういった時限処理は今後有効に使えそうですね。

 

では。