Há três Timer
classes que eu estou ciente de, System.Threading.Timer
, System.Timers.Timer
, e System.Windows.Forms.Timer
, mas nenhum deles tem uma .Reset()
função que iria repor o tempo decorrido atual para 0.
Existe uma classe BCL que possui essa funcionalidade? Existe uma maneira não hack de fazer isso? (Eu pensei que talvez mudar o limite de tempo nele pudesse redefini-lo) Pensei em como seria difícil reimplementar uma Timer
classe que tivesse essa funcionalidade, ou como fazer isso de forma confiável com uma das classes BCL?
Respostas:
Eu sempre faço ...
... isso é um hack? :)
Por comentário, em Threading.Timer, é o método Change ...
fonte
Forms.Timer
só deve ser usado com uma GUI. No entanto, além deForms.Timer
eThreading.Timer
há tambémTimers.Timer
.Todos os temporizadores têm o equivalente aos métodos Start () e Stop (), exceto System.Threading.Timer.
Portanto, um método de extensão como ...
... é uma maneira de fazer isso.
fonte
timer.Start()
. Fiz esta consulta Linqpad para testá-lo. Tente removêtimer.Stop
-lo e você verá a diferença.Para
System.Timers.Timer
, de acordo com a documentação do MSDN, http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :Assim,
fonte
Você pode escrever um método de extensão chamado Reset (), que
fonte
Acabei de atribuir um novo valor ao cronômetro:
Isso funciona bem para mim.
no topo do código, defina o cronômetro:
System.Threading.Timer myTimer;
fonte
Para maior clareza, uma vez que alguns outros comentários estão incorretos, ao usar a
System.Timers
configuração Enabled para true , redefinirá o tempo decorrido. Acabei de testar o comportamento com o seguinte:Gostaria de inserir texto na caixa de texto repetidamente e o cronômetro funcionaria apenas 3 segundos após o último pressionamento de tecla. Também é sugerido nos documentos, como você verá: chamar
Timers.Start()
simplesmente define Enabled como true.E para ter certeza, ao qual eu deveria ter ido direto desde o início, você verá na fonte de referência do .NET que, se habilitar um timer já Enabled, ele chama o
UpdateTimer()
método privado , que chama internamenteChange()
.fonte
UpdateTtimer
método privado é chamado se e somente se o valor atual deEnabled
não for igual ao novovalue
.Para um Timer (System.Windows.Forms.Timer).
Os métodos .Stop e .Start funcionaram como um reset.
fonte
Outra forma alternativa de redefinir o windows.timer é usar o contador, da seguinte maneira:
Portanto, se você pretende repetir a cada 1 segundo, pode definir o intervalo do cronômetro em 100 ms e testar o contador em 10 ciclos.
Isso é adequado se o cronômetro deve esperar por alguns processos que podem ser encerrados em um intervalo de tempo diferente.
fonte
Eu faço isso
fonte
Você pode fazer
timer.Interval = timer.Interval
fonte