2012-04-13 37 views
9

Sự kiện đã xảy ra của System.Timers.Timer có hiệu quả giống như sự kiện Tick của System.Windows.Forms.Timer không?Sự kiện đã trôi qua v Đánh dấu sự kiện?

Trong trường hợp cụ thể có lợi thế khi sử dụng cái này thay vì cái kia?

+0

'System.Threading.Timer' là người duy nhất làm việc cho tôi trong' Windows Server 2008 R2' mặc dù Timers.Timer đã làm việc trong máy tính xách tay 'Windows 7' của tôi. – Lijo

Trả lời

6

Kiểm tra các liên kết này herehere để hiểu đầy đủ về bộ tính giờ trong .Net framework.

Có ba loại bộ hẹn giờ.

  • System.Windows.Forms.Timer
  • System.Timers.Timer
  • System.Threading.Timer

Cá nhân tôi thích System.Timers.Timer vì nó là thread-safe.

+0

vì tôi là người mới, tôi cần hỏi tại sao chủ đề không an toàn của người khác? – whytheq

+1

@whytheq Chủ đề an toàn có nghĩa là các phiên bản của lớp System.Timers.Timer có thể được truy cập an toàn từ nhiều luồng. Các lớp Timer khác sẽ gặp vấn đề trong trường hợp này. An toàn chủ đề là một vấn đề phổ biến trong các ứng dụng đa luồng. Để hiểu đầy đủ, hãy đọc loạt bài viết này. http://www.albahari.com/threading/ – ABH

+0

Vì vậy, trong điều kiện laym hẹn giờ tiếp tục chạy không phụ thuộc vào những gì các chủ đề khác đang chạy? – whytheq

11

Các câu trả lời khác cung cấp nhiều chi tiết, nhưng sự khác biệt trọng số giữa hai bộ hẹn giờ bạn đã đề cập là System.Windows.Forms.Timer sẽ gọi lại cuộc gọi trên chuỗi giao diện người dùng, trong khi System.Timers.Timer sẽ sử dụng một trong các chủ đề từ nhóm chủ đề chính .

+0

Đó là một cách tuyệt vời để nói điều đó. –

+0

... vì vậy 'System.Timers.Timer' là an toàn luồng trong khi bộ đếm biểu mẫu không? Và nếu tôi muốn chạy các tiến trình song song bằng cách sử dụng bộ hẹn giờ để bắt đầu mỗi quá trình thì 'System.Timers.Timer' là bộ hẹn giờ tốt nhất để sử dụng? – whytheq

+0

Nó phụ thuộc vào yêu cầu luồng của bạn. Nếu mã mà bộ hẹn giờ đang thực hiện cần sửa đổi GUI, thì hãy sử dụng bộ định thời Biểu mẫu. Ngoài ra, Cho rằng có (thường) chỉ có một chuỗi sự kiện, điều đó có nghĩa là trình xử lý sự kiện bộ đếm thời gian biểu mẫu sẽ không bao giờ được gọi đồng thời (nhiều lần cùng một lúc). Tuy nhiên, bạn thường không nên thực hiện các nhiệm vụ không liên quan đến GUI trên giao diện GUI (vì nó làm cho GUI kém đáp ứng hơn) do đó bộ hẹn giờ Timers sẽ tốt hơn, với báo trước rằng bạn hiện chịu trách nhiệm xử lý đồng thời. – SimonC

Các vấn đề liên quan