apa bedanya between System.Windows.Forms.Timer()
dan System.Windows.Threading.DispatcherTimer()
? Dalam kasus mana, kita harus menggunakannya? ada praktik terbaik?
apa bedanya between System.Windows.Forms.Timer()
dan System.Windows.Threading.DispatcherTimer()
? Dalam kasus mana, kita harus menggunakannya? ada praktik terbaik?
Jawaban:
Windows.Forms.Timer
menggunakan loop pesan bentuk jendela untuk memproses peristiwa timer. Ini harus digunakan saat menulis kejadian waktu yang sedang digunakan dalam aplikasi Windows Forms, dan Anda ingin pengatur waktu diaktifkan pada utas UI utama.
DispatcherTimer
adalah mekanisme waktu WPF. Ini harus digunakan ketika Anda ingin menangani pengaturan waktu dengan cara yang sama (meskipun ini tidak terbatas pada satu utas - setiap utas memiliki operatornya sendiri) dan Anda menggunakan WPF. Ini mengaktifkan acara di utas yang sama dengan Dispatcher.
Secara umum, WPF == DispatcherTimer
dan Windows Forms == Forms.Timer
.
Bisa dikatakan, ada juga System.Threading.Timer
, yang merupakan pengatur waktu class
yang menyala pada utas terpisah. Ini bagus untuk pengaturan waktu numerik murni, di mana Anda tidak mencoba memperbarui UI, dll.
Saya telah menemukan artikel bagus tentang pengatur waktu dengan contoh kecil di sini: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
Sebagai sebuah kesimpulan:
Jika DoSomething () memanipulasi komponen GUI maka dengan Timer Anda perlu menggunakan: this.Dispatcher.Invoke ((Action) delegate {// GUI RELATED CODE HERE} karena Anda tidak dapat mengakses kontrol GUI dari thread berbeda secara langsung. Dengan DispatcherTimer Anda melakukannya tidak perlu melakukan itu.
Jika DoSomething () melakukan tugas yang memakan waktu, maka GUI akan berhenti dalam kasus DispatcherTimer. Dalam kasus Timer, itu tidak akan terjadi karena metode panjang dijalankan di utas yang berbeda