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.Timersử 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.
DispatcherTimerlà 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 == DispatcherTimervà Windows Forms == Forms.Timer.
Điều đó đang được nói, System.Threading.Timerđó là một bộ đếm thời gian classkí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