Есть три Timer
класса , которые я знаю, System.Threading.Timer
, System.Timers.Timer
и System.Windows.Forms.Timer
, но ни один из них не имеет .Reset()
функции , которая будет сбросить текущее время , прошедшее до 0.
Есть ли класс BCL, у которого есть эта функция? Есть ли способ сделать это без взлома? (Я подумал, что, возможно, изменение ограничения по времени может сбросить его). Подумал, насколько сложно будет повторно реализовать Timer
класс, имеющий эту функцию, или как надежно сделать это с помощью одного из классов BCL?
Ответы:
Я всегда делаю ...
... это взлом? :)
В комментарии к Threading.Timer это метод Change ...
источник
Forms.Timer
следует использовать только с графическим интерфейсом. Впрочем, кроме тогоForms.Timer
иThreading.Timer
есть ещеTimers.Timer
.Все таймеры имеют эквивалент методов Start () и Stop (), за исключением System.Threading.Timer.
Итак, метод расширения, такой как ...
... это один из способов решить эту проблему.
источник
timer.Start()
. Я сделал этот запрос Linqpad, чтобы проверить его. Попробуйте удалитьtimer.Stop
его, и вы увидите разницу.Ведь
System.Timers.Timer
согласно документации MSDN http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :Так,
источник
Вы можете написать метод расширения под названием Reset (), который
источник
Я только что присвоил таймеру новое значение:
Он отлично работает для меня.
в верхней части кода определите таймер:
System.Threading.Timer myTimer;
источник
Для ясности, поскольку некоторые другие комментарии неверны, при использовании
System.Timers
настройки Enabled на true , истекшее время будет сброшено. Я только что проверил поведение следующим образом:Я вводил текст в текстовое поле несколько раз, и таймер запускался только через 3 секунды после последнего нажатия клавиши. На это также намекают в документации, как вы увидите: вызов
Timers.Start()
просто устанавливает для Enabled значение true.И, чтобы быть уверенным, к чему я должен был пойти прямо с самого начала, вы увидите в справочном источнике .NET, что при включении уже включенного таймера он вызывает частный
UpdateTimer()
метод, который вызывает внутренние вызовыChange()
.источник
UpdateTtimer
метод вызывается тогда и только тогда, когда текущее значениеEnabled
не равно новомуvalue
.Для таймера (System.Windows.Forms.Timer).
Методы .Stop, затем .Start работали как сброс.
источник
Другой альтернативный способ сбросить windows.timer - использовать счетчик, как показано ниже:
Поэтому, если вы собираетесь повторять каждую 1 секунду, вы можете установить интервал таймера на 100 мс и проверить счетчик на 10 циклов.
Это подходит, если таймер должен ждать некоторых процессов, которые могут быть завершены в другой промежуток времени.
источник
я сделаю это
источник
Ты можешь сделать
timer.Interval = timer.Interval
источник