私はWPFを使用して非常に単純なストップウォッチに取り組んでいますが、System.Diagnostics
ストップウォッチを使用して非常に遅く、私のアプリケーションから1秒ごとに私のシステムクロックと比較して全く信頼性がありませんでした。ストップウォッチの代わりに?
ストップウォッチについての検索が遅かったり、結果がたくさん見つかりましたが解決策が見つからなかったので、自分のカウンターを用意することにしました。ここで
は私が思い付いたのサンプルです:
System.Windows.Threading.DispatcherTimer _update;
DateTime _started;
bool isRunning = false;
更新スレッド:
_update = new System.Windows.Threading.DispatcherTimer(new TimeSpan(0, 0, 0, 0, 1), System.Windows.Threading.DispatcherPriority.Normal, delegate
{
if (isRunning)
iTimer.Content = new DateTime((DateTime.Now - _started).Ticks).ToString("HH:mm:ss");
}, this.Dispatcher);
私は2つのボタンがあり、bToggle、開始、停止、それを再開するためのresposibleであるとbResetという別のボタン。
private void bReset_Click(object sender, RoutedEventArgs e)
{
isRunning = false;
iTimer.Content = "00:00:00";
bToggle.Content = "Start";
}
private void bToggle_Click(object sender, RoutedEventArgs e)
{
if ((string)bToggle.Content == "Start")
{
isRunning = true;
_started = DateTime.Now;
bToggle.Content = "Stop";
}
else if ((string)bToggle.Content == "Resume")
{
isRunning = true;
bToggle.Content = "Stop";
}
else
{
isRunning = false;
bToggle.Content = "Resume";
}
}
これは正常に動作しますが、停止して再開すると実際の時間が使用されているため、実際の時間まで秒が飛びます。
この問題を解決するにはどうすればよいですか、実際には現時点で精度の良いストップウォッチの代替手段がありますか?
あなたは背景にしたDispatcherPriorityを設定し、低い周波数を使用する必要がありますか? – Oded
ストップウォッチャーの場合は?それを簡単にするために、0から停止またはリセットまでカウントします。 – Guapo
タイマーとして使ってみたようですね。 – Oded