Ada tiga Timer
kelas yang saya sadar, System.Threading.Timer
, System.Timers.Timer
, dan System.Windows.Forms.Timer
, namun tidak satupun dari ini memiliki .Reset()
fungsi yang akan mengatur ulang waktu yang telah berlalu saat ini untuk 0.
Apakah ada kelas BCL yang memiliki fungsi ini? Apakah ada cara non-hack untuk melakukannya? (Saya pikir mungkin mengubah batas waktu di atasnya mungkin akan mengatur ulang) Berpikir tentang betapa sulitnya untuk menerapkan kembali Timer
kelas yang memiliki fungsi ini, atau bagaimana melakukannya dengan andal dengan salah satu kelas BCL?
Jawaban:
Aku selalu melakukan ...
... apakah itu hack? :)
Per komentar, di Threading.Timer, ini adalah metode Ubah ...
sumber
Forms.Timer
sebaiknya hanya digunakan dengan GUI. Namun, selainForms.Timer
danThreading.Timer
ada jugaTimers.Timer
.Semua pengatur waktu memiliki metode yang setara dengan Start () dan Stop (), kecuali System.Threading.Timer.
Jadi metode penyuluhan seperti ...
... adalah salah satu cara untuk melakukannya.
sumber
timer.Start()
. Saya membuat query Linqpad ini untuk mengujinya. Coba hapustimer.Stop
di dalamnya dan Anda akan melihat perbedaannya.Untuk
System.Timers.Timer
, menurut dokumentasi MSDN, http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :Begitu,
sumber
Anda bisa menulis metode ekstensi yang disebut Reset (), yang
sumber
Saya baru saja menetapkan nilai baru ke timer:
itu bekerja dengan baik untuk saya.
di bagian atas kode tentukan pengatur waktu:
System.Threading.Timer myTimer;
sumber
Untuk kejelasan karena beberapa komentar lain tidak benar, saat menggunakan
System.Timers
pengaturan Diaktifkan ke true akan mengatur ulang waktu yang telah berlalu. Saya baru saja menguji perilakunya dengan di bawah ini:Saya akan memasukkan teks ke kotak teks berulang kali dan pengatur waktu hanya akan berjalan 3 detik setelah penekanan tombol terakhir. Ini diisyaratkan di dokumen juga, seperti yang akan Anda lihat: pemanggilan
Timers.Start()
cukup set Diaktifkan ke true.Dan untuk memastikan, yang seharusnya saya langsung ke dari awal, Anda akan melihat di sumber referensi .NET bahwa jika mengaktifkan pengatur waktu yang sudah Diaktifkan itu memanggil
UpdateTimer()
metode pribadi , yang secara internal memanggilChange()
.sumber
UpdateTtimer
Metode privat dipanggil jika dan hanya jika nilai saatEnabled
ini tidak sama dengan yang baruvalue
.Untuk Timer (System.Windows.Forms.Timer).
Metode .Stop, lalu .Start berfungsi sebagai reset.
sumber
Cara alternatif lain untuk mereset windows.timer adalah menggunakan counter, sebagai berikut:
Jadi, jika Anda bermaksud untuk mengulang setiap 1 detik, Anda dapat mengatur interval pengatur waktu pada 100ms, dan menguji penghitung hingga 10 siklus.
Ini cocok jika pengatur waktu harus menunggu beberapa proses yang mungkin berakhir pada rentang waktu yang berbeda.
sumber
saya melakukan ini
sumber
Anda dapat melakukan
timer.Interval = timer.Interval
sumber