2015-07-08 5 views
8

Простите меня за этот вопрос, но я не могу найти хороший источник того, когда его использовать. Был бы рад, если бы вы могли объяснить это простыми словами.StopWatch vs Timer - Когда использовать

Кроме того, я столкнулся с этой дилеммой:

Престола, я кодирование простого приложения. Я хочу, чтобы он показывал прошедшее время (формат hh: mm: ss или что-то еще). Но также, чтобы иметь возможность «ускорить» или «замедлить» свои временные интервалы (то есть ускорить, так что минутка в реальном времени равна часу в приложении).

Например, в Youtube видео (* давайте не будем учитывать тот факт, что мы можем перейти к конкретным частям VID *), мы видим, фактическое время, проведенное в наблюдении, что видео в левом нижнем углу экрана , но, пройдя навигацию в меню опций, мы можем ускорить видео вверх или вниз.

Youtube (2015) video player control bar

И мы действительно можем видеть, что время обновляется таким образом, что согласуется с коэффициентом скорости (как, если вы выбираете два раза скорость, таймер ниже обновляется в два раза быстрее, чем обычно), и вы можете изменить эту скорость, когда захотите.

enter image description here

Это то, что я своего рода после. Что-то вроде того, как видео Youtube измеряют прошедшее время и тот факт, что они могут изменять временные интервалы. Итак, какой из двух, по-твоему, я должен выбрать? Таймер или секундомер?

Я просто кодирую приложение Windows Form, кстати. Я что-то имитирую, и я хочу, чтобы пользователь мог ускоряться всякий раз, когда захочет. Простым, как это может быть, я хочу реализовать правильный подход.

+0

Возможный дубликат [Как я мог бы использовать секундомер с разными скоростями?] (Http://stackoverflow.com/questions/2857210/how-would-i-go-about-implementing-a-stopwatch-with -дифференциальные скорости) –

+3

Таймер бесполезен для измерения прошедшего времени, он достаточно хорош, чтобы обновить этот ярлык. Используйте Environment.TickCount, DateTime.UtcNow или Секундомер. Первые два очень точны в течение длительного времени, последние хороши в течение коротких периодов времени. –

+0

@HansPassant: +1, я всегда использую StopWatch из-за точно тех точек, которые вы вызываете. – code4life

ответ

8

Насколько я знаю, основные различия:

Таймер

  1. Таймер только простой планировщик, который работает какой-то операции/метод для вас раз в то время.
  2. Он выполняет метод в отдельном потоке. Это предотвращает блокировку основного потока.

Секундомер

  1. Секундомер по умолчанию работает в том же потоке.
  2. Он может рассчитывать время и возвращает TimeSpan struct, который может быть полезен, если вам нужна дополнительная информация.

Таймер хорош, если вам нужно выполнить некоторые задания за промежутки времени. Секундомер хорош, если вам нужно посмотреть время и больше информации о том, сколько истекших тиков процессора делает ваш метод, и такие вещи.

+0

Upvote: контекст потока довольно значителен. – code4life

2

Это уже было рассмотрено по ряду других вопросов, включая here. В принципе, вы можете либо иметь секундомер с коэффициентом скорости, то результатом будет ваше «прошедшее время». Более сложный подход заключается в реализации таймера and changing the Interval property.

+0

Не видел этого. Виноват. И спасибо. –

+1

Если вас спросили и ответили много раз, вы не должны отвечать и ждать, пока другие его закроют ... –

+0

Я добавил, что проголосовал за вас, BTW, вы должны знать, что ваш «ответ» должен быть комментарием. .. –

Смежные вопросы