2011-07-30 6 views
1

カウントダウンタイマーを2時間半刻々と開始したい。ディスパッチャータイマーを使って試しましたWP7でカウントダウンタイマー

以下のコードを見てください。しかし、秒が正しく更新されていません。それは速すぎる。一度に1秒ではなく2秒を目安にします

private void DrawBlackout() 
    { 
     TextBlock videoText = new TextBlock(); 
     dt = new DispatcherTimer(); 
     dt.Interval = new TimeSpan(0,0,1); // 1 Seconds 
     dt.Tick += new EventHandler(dt_Tick); 
     dt.Start(); 


    } 

    void dt_Tick(object sender, EventArgs e) 
    { 
     // do something 

     milliseconds = milliseconds - 1000; 
     label.Text = getTimeText(milliseconds/1000); 
     elapsed += 1000; 

     //Debug.WriteLine(stopwatch.ElapsedMilliseconds + "\n"); 
     if (milliseconds <= 1000) 
      dt.Stop(); 
    } 



    String getTimeText(long secVal) 
    { 

     String timeString = ""; 
     int seconds = (int)(secVal % 60); 
     int minutes = (int)((secVal/60) % 60); 
     int hours = (int)((secVal/(60 * 60)) % 60); 
     if (hours <= 9) 
      timeString = "0" + Convert.ToString(hours) + " : "; 
     else 
      timeString = Convert.ToString(hours) + " : "; 
     if (minutes <= 9) 
      timeString = timeString + "0" + Convert.ToString(minutes) + " : "; 
     else 
      timeString = timeString + Convert.ToString(minutes) + " : "; 
     if (seconds <= 9) 
      timeString = timeString + "0" + Convert.ToString(seconds) + " "; 
     else 
      timeString = timeString + Convert.ToString(seconds) + " "; 
     return timeString; 
    } 

この問題を解決するにはどうすればよいですか?

+0

それは私のためにうまくいきます! –

+0

これはエミュレータまたは実デバイスでですか? –

+1

各ティックが正確に1000msであると仮定するのではなく、開始時間を控えておき、各ティックごとに開始からどれくらいの時間が経過したかを見てください。それからあなたは100ミリ秒ごとにチェックして、かなり一貫して見えるはずです。 –

答えて

-1
void DisTimer_Tick(object sender, EventArgs e) 
     { 
      timeRefresh++; 
      if (sec > 0) 
      { 
       sec--; 
      } 
      else if (sec == 0 && min > 0) 
      { 
       sec = 59; 
       min--; 
      } 
      else if (sec == 0 && min == 0 && house > 0) 
      { 
       sec = 59; 
       min = 59; 
       house--; 
      } 
      txtHouse.Text = house.ToString(); 
      txtMin.Text = min.ToString(); 
      txtSec.Text = sec.ToString(); 

      if (sec == 0 && min == 0 && house == 0) 
      { 
       DisTimer.Tick -= new EventHandler(DisTimer_Tick); 
       getBuyer(); 
      } 
      else if (timeRefresh == 60) 
      { 
       getBuyer(); 
       DisTimer.Tick -= new EventHandler(DisTimer_Tick); 
      } 
     } 

私はあなたを助けてくれることを願っています!

Thongaduka(diadiem JSC)