sự khác biệt là gì between System.Windows.Forms.Timer()
và System.Windows.Threading.DispatcherTimer()
? Trong những trường hợp nào, chúng ta nên sử dụng chúng? bất kỳ thực hành tốt nhất?
sự khác biệt là gì between System.Windows.Forms.Timer()
và System.Windows.Threading.DispatcherTimer()
? Trong những trường hợp nào, chúng ta nên sử dụng chúng? bất kỳ thực hành tốt nhất?
Câu trả lời:
Windows.Forms.Timer
sử dụng vòng lặp thông báo dạng cửa sổ để xử lý các sự kiện hẹn giờ. Nó nên được sử dụng khi viết các sự kiện thời gian đang được sử dụng trong các ứng dụng Windows Forms và bạn muốn bộ hẹn giờ kích hoạt trên chuỗi giao diện người dùng chính.
DispatcherTimer
là cơ chế định thời WPF. Nó nên được sử dụng khi bạn muốn xử lý thời gian theo cách tương tự (mặc dù điều này không giới hạn ở một luồng duy nhất - mỗi luồng có bộ điều phối riêng) và bạn đang sử dụng WPF. Nó kích hoạt sự kiện trên cùng một chuỗi với Dispatcher.
Nói chung, WPF == DispatcherTimer
và Windows Forms == Forms.Timer
.
Điều đó đang được nói, System.Threading.Timer
đó là một bộ đếm thời gian class
kích hoạt trên một chuỗi riêng biệt. Điều này rất tốt cho thời gian hoàn toàn bằng số, khi bạn không cố cập nhật giao diện người dùng, v.v.
Tôi đã tìm thấy bài viết hay về bộ tính giờ với các ví dụ nhỏ ở đây: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
Là một kết luận:
Nếu DoSomething () thao tác các thành phần GUI thì với Bộ hẹn giờ bạn cần sử dụng: this.Dispatcher.Invoke ((Hành động) ủy nhiệm {// MÃ LIÊN QUAN ĐẾN GUI TẠI ĐÂY} vì bạn không thể truy cập trực tiếp các điều khiển GUI từ một luồng khác. Với DispatcherTimer, bạn sẽ làm được không cần phải làm điều đó.
Nếu DoSomething () thực hiện một tác vụ tốn thời gian, thì GUI sẽ bị đóng băng trong trường hợp của DispatcherTimer. Trong trường hợp của Timer, nó sẽ không vì các methos dài được thực thi trong một luồng khác