Как перезапустить таймер в c

от admin

Как сбросить таймер в C#?

три Timer классы, о которых я знаю, System.Threading.Timer , System.Timers.Timer и System.Windows.Forms.Timer , но ни один из них не имеет .Reset() функция, которая сбросит текущее затраченное время до 0.

есть ли класс BCL, который имеет эту функциональность? Есть ли способ сделать это без взлома? (Я думал, что, возможно, изменение ограничения по времени на него может сбросить его) думал о том, как трудно было бы переопределить a Timer класс, который имел эту функциональность, или как это сделать надежно с одним из BCL занятия?

10 ответов:

Я всегда так делаю .

. это хак? 🙂

за комментарий, на нитку.Таймер, это изменить метод .

тип dueTime: System.Int32 в время задержки перед вызов указанного метода обратного вызова когда таймер был построен в миллисекунды. Указывать Timeout.Infinite для предотвращения таймер с перезапуском. Укажите ноль (0) для немедленного перезапуска таймера.

все таймеры имеют эквивалент методов Start() и Stop (), кроме System.Нарезка резьбы.Таймер.

таким образом, метод расширения, например.

. это один из способов сделать это.

на System.Timers.Timer , согласно документации MSDN,http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx:

если интервал установлен после запуска таймера, то счетчик равен сброс. Например, если установить интервал в 5 секунд, а затем установить свойство Enabled имеет значение true, счетчик начинается в момент включения набор. Если вы сбросите интервал до 10 секунд, когда количество составляет 3 секунды, прошедшее событие возникает при первый раз через 13 секунд Включено было установлено значение true.

  • вызовы Stop () — Start () для таймеров.Таймер и формы.Таймер
  • изменения вызовов для потоковой передачи.Таймер

Я только что присвоил новое значение таймеру:

он отлично работает для меня.

в верхней части кода определяют таймер: System.Threading.Timer myTimer;

для таймера (системы.Окна.Формы.Таймер.)

The .Тогда остановись .Методы запуска работали как сброс.

для ясности, так как некоторые другие комментарии неверны, при использовании System.Timers настройки Enabled в true будет сброс прошедшего времени. Я просто проверил поведение с ниже:

Я бы вводил текст в текстовое поле несколько раз, и таймер будет работать только через 3 секунды после последнего нажатия клавиши. На это намекают и в документах, как вы увидите: calling Timers.Start() просто устанавливает значение true.

и быть уверенным, что я должен был просто пошел прямо с самого начала, вы увидите в.NET reference source что при включении уже включенного таймера он вызывает private UpdateTimer() метод, который внутренне вызывает Change() .

другой альтернативный способ сброса windows.таймер использует счетчик следующим образом:

поэтому, если вы собираетесь повторять каждые 1 секунду, вы можете установить интервал таймера на 100 мс и проверить счетчик на 10 циклов.

это подходит, если таймер должен ждать некоторых процессов, которые могут быть завершены в другой промежуток времени.

Как перезапустить таймер в c

This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.

Answered by:

Question

i have a timer control for 120 seconds .. it decrements the counter . what i am doing is when counter goes to zero the dialogue box appears n say do u wanna continue and if use says ok it goes back to the game n timer should restart .. but everything is going good but counter instead goes into -1 -2 -3 instead starting over from 120 i have seen the solutions here but nothing worked for me so i thought to post it myself thanks

  • Edited by amy aim Monday, September 11, 2017 5:38 PM

Answers

It seems that when your counter=0 the timer did not stop, so it still count—.

So I suggest that you could check whether you have only a timer in front page and do not redefine timer in code behind.

Как сбросить таймер на C #?

Есть три Timer классы, о которых я знаю, System.Threading.Timer , System.Timers.Timer System.Windows.Forms.Timer , но ни у одного из них нет .Reset() функция, которая сбрасывает текущее прошедшее время на 0.

Есть ли у класса BCL такая функциональность? Есть ли способ сделать это без взлома? (Я подумал, что, возможно, изменение ограничения по времени может сбросить его) Подумал о том, насколько сложно будет повторно реализовать Timer класс, который имел эту функциональность, или как надежно сделать это с помощью одного из классов BCL?

Читать:
Почему в фш бледная замена цвета

задан 25 июн ’09, 02:06

Используя решение JP, используйте метод расширения — benPearce

У меня такая же потребность в сбросе, и по тем же причинам, упомянутым выше, FileSystemWatcher неприятен и неудобен в использовании — John Lewin

Если вы используете секундомер в качестве таймера и используете ответ метода расширения, будьте осторожны, потому что метод расширения Stopwatch.Restart входит в .NET 4.0. msdn.microsoft.com/ru-ru/library/… — si618

10 ответы

В комментарии к Threading.Timer это Изменить метод .

dueTime Тип: System.Int32 Время задержки перед вызовом метода обратного вызова, указанного при создании Timer, в миллисекундах. Указать Timeout.Infinite чтобы таймер не перезапустился. Укажите ноль (0) для немедленного перезапуска таймера.

Другая проблема заключается в том, что работает только с Forms.Timer, а у моего приложения нет графического интерфейса (Application.Start () без параметров), поэтому я ДУМАЮ, что класс Threading.Timer лучше по другим причинам, но это хороший момент. — Мэтью Шарли

@Matthew: Смотри msdn.microsoft.com/en-us/magazine/cc164015.aspx для обсуждения различных классов таймеров и их использования. Но в целом Forms.Timer следует использовать только с графическим интерфейсом. Однако помимо Forms.Timer и Threading.Timer Есть также Timers.Timer . — Брайан

Все таймеры имеют эквиваленты методов Start () и Stop (), кроме System.Threading.Timer.

Итак, метод расширения, такой как .

. это один из способов решить эту проблему.

Создан 29 июля ’12, 18:07

Я не собираюсь измерять прошедшее время. Мой точный вариант использования для этого заключается в том, что у меня есть FileSystemWatcher, наблюдающий за каталогом, и я хочу улавливать группы изменений (т. Е. Изменения, сделанные, например, в пределах 5 секунд друг от друга). Теория состоит в том, что первое изменение запускает таймер, который сбрасывается при каждом изменении, пока в конечном итоге не сработает и не закроет группу. — Мэтью Шарли

Да, я заметил это, когда перечитал твой вопрос. Отредактировал свой ответ. — Дан

Это работает, и важно отметить, что это не сработает, если вы только позвоните timer.Start() . я сделал этот запрос Linqpad чтобы проверить это. Попробуйте удалить timer.Stop в нем, и вы увидите разницу. — Джаред Бич

Если интервал установлен после запуска таймера, счетчик сбрасывается. Например, если вы установите интервал равным 5 секундам, а затем установите для свойства Enabled значение true, отсчет начнется в то время, когда установлено значение Enabled. Если вы сбрасываете интервал на 10 секунд, когда счетчик равен 3 секундам, событие Elapsed возникает впервые через 13 секунд после того, как для Enabled было установлено значение true.

ответ дан 12 авг.

Проблема здесь в том, что в момент сброса вы не всегда знаете, запущен ли таймер или нет. Итак, вам нужно будет выполнить aTimer.Interval = TIMEOUT и aTimer.Start (). Таким образом, в целом функция сброса, описанная выше, использует меньше строк и переменных. Впрочем, отличное дополнение. — электронный мотив

@ RU-Bn В ОП четко сказано: «функция .Reset (), которая сбрасывает текущее прошедшее время на 0. «- здесь не упоминается, что он предназначен для использования в плохо спроектированном приложении, где вы даже не знаете, работает ли таймер. Также проверьте комментарий автора (более 4 лет назад):»Теория состоит в том, что первое изменение запускает таймер, который сбрасывается при каждом изменении, пока в конечном итоге не сработает и не закроет группу.«. В любом случае, спасибо за голосование» против «. — мМонту

Как перезапустить таймер в c

There are three Timer classes that I am aware of, System.Threading.Timer , System.Timers.Timer , and System.Windows.Forms.Timer , but none of these have a .Reset() function which would reset the current elapsed time to 0.

Is there a BCL class that has this functionality? Is there a non-hack way of doing it? (I thought perhaps changing the time limit on it might reset it) Thought on how hard it would be to reimplement a Timer class that had this functionality, or how to do it reliably with one of the BCL classes?

Похожие статьи