2017-03-27 6 views
0

Date Timeについての多くの質問と回答がありますが、私が探しているものが見つかりませんでした。私は自分の問題を説明しましょうタイマー(間隔10ms)を備えたチョロメータを「ザマン」として作成しましたが、私のプログラムはリアルタイムのクロノメーターと同じ速さでコンパイルしません。これは問題ありません。 Therfore私は日付の機能を使用してクロノメーターとして使用したいが問題がある:00:00:00.00(hh:mm:ss.ff)から始めることができませんでした。私はそれをやったかったので、時間データを使用することによってプログラムは、リアルタイムデータを描画し、すべての測定のためにゼロから測定終了(経過時間)までに開始する必要があります。これは私のコードについてです(relaibleではない)。あなたはそれをより正確にする方法やdate.time.nowを作る方法を手伝って、00:00:00.00から始めるのですか?
salise =ミリ秒、saniye =秒、dakika =分日時計としてのChoronometer

private void zaman_Tick(object sender, EventArgs e) 
    { 
      salise = Convert.ToInt32(lblsalise.Text); 
      if (salise < 99) 
      { 
       lblsalise.Text = Convert.ToString(salise + 1); 
      } 
      else 
      { 
       lblsalise.Text = "00"; 
       saniye = Convert.ToInt32(lblsaniye.Text); 
       if (saniye < 59) 
       { 
        lblsaniye.Text = Convert.ToString(saniye + 1); 
       } 
       else 
       { 
        lblsaniye.Text = "00"; 
        dakika = Convert.ToInt32(lbldakika.Text); 
        if (dakika < 59) 
        { 
         lbldakika.Text = Convert.ToString(dakika + 1); 
        } 
        else 
        { 
         lbldakika.Text = "00"; 
        } 
       } 
      } 
      lblzaman.Text = lbldakika.Text + ":" + lblsaniye.Text + ":" + lblsalise.Text; 



     } 
+6

使用 'Stopwatch'代わりに。これは、経過時間を測定するために特別に設計されています。そのアドバイスを越えて、私はあなたの質問の残りの部分を理解していないのではないかと心配しています... –

+0

このコードは何をする予定ですか?文字列操作のみを表示します。現在の時間はどこですか? 'DateTime.Now'を使用する代わりに*ラベルテキスト*を使用して時間と分を計算して保存しようとしていますか? –

+0

@ Jodrellこれは、この場合、まったく役に立たないでしょう。コードは現在の時刻を取得しようとしません。それは、ラベルの解析とインクリメントを試みます。 –

答えて

2

すべてのタイマーが歪んでいます。つまり、を計算すると、秒と分を加算して経過時間を計算すると、ある時点で無効な値になります。

アプリケーションは、Stopwatchクラスを使用して経過時間を測定します。このクラスは何も数えません。起動すると、a high resolution performance counterという値がティックで格納されます。 Elapsed時間を要求すると、現在のアップタイムを取得し、その差を計算します。その後

は、ラベルを設定すると、例えば、Elapsedプロパティによって返されたTimeSpan値の書式を設定するだけです:

Stopwatch _watch=new Stopwatch(); 

public void Start() 
{ 
    _watch.Start(); 
} 

private void zaman_Tick(object sender, EventArgs e) 
{ 
    var time=_watch.Elapsed; 
    lblFull.Text = time.ToString(@"hh\:mm\:ss\.ff"); 
    lblHours.Text= time.ToString(@"hh"); 
    lblMinutes.Text= time.ToString(@"mm"); 
    lblSecs.Text= time.ToString(@"ss"); 
    lblMs.Text= time.ToString(@"ff"); 
} 
1

私はStopwatch.Elapsedの値がそのTimeSpanある

var stopwatch = System.Diagnotics.Stopwatch.StartNew(); 

private void zaman_Tick(object sender, EventArgs e) 
{ 
    lblzaman.Text = stopwatch.Elapsed.ToString(); 
} 

Stopwatchを使用して、あなたはこのような何かを持つほうが良いと思いますformatted in many different waysとすることができます。いくつかの例では@Panagiotis's answerを参照してください。


あなたはlblzamanが正確な間隔で更新したい場合は、バックグラウンドスレッドで、あなたのイベントソースとしてSystem.Timers.Timerまたは多分、System.Threading.Timerを使用して調査する必要がありますが、あなたは上のクロススレッドのコールを処理する必要があります、覚えていますUIの更新。

関連する問題