Альтернатива секундомеру?C#

Место общения программистов C#
Anonymous
Альтернатива секундомеру?

Сообщение Anonymous »

Я работаю над очень простым секундомером, используя WPF, но использование секундомера System.Diagnostics было очень медленным и совсем ненадежным, по сравнению с моими системными часами каждая 1 секунда моего приложения составляла 3 секунды на реальном часы.

Я поискал информацию о том, что секундомер работает медленно, нашел много результатов, но не нашел решения этой проблемы, поэтому решил придумать свой собственный счетчик.

Вот пример того, что у меня получилось:

Код: Выделить всё

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, которая позволяет запускать, останавливать и возобновлять его, и еще одна кнопка, называемая 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";
}
}
Запуск и сброс работают нормально, но, поскольку я использую фактическое время, если остановиться и возобновить работу, секунды будут прыгать до фактического времени.

Как я могу решить эту проблему или есть ли альтернатива секундомеру, которая действительно имеет хорошую точность определения текущего времени?

Подробнее здесь: https://stackoverflow.com/questions/104 ... -stopwatch

Вернуться в «C#»