2008-08-01 28 views
75

Tôi biết rằng trong .NET có ba loại bộ hẹn giờ (xem Comparing the Timer Classes in the .NET Framework Class Library). Tôi đã chọn một bộ đếm thời gian ren như các loại khác có thể trôi dạt nếu chủ đề chính là bận rộn, và tôi cần điều này là đáng tin cậy.Bộ đếm thời gian đáng tin cậy trong ứng dụng bảng điều khiển

Cách bộ hẹn giờ này hoạt động trong bộ điều khiển hẹn giờ được đặt trên một chuỗi khác để nó luôn có thể đánh dấu cùng với công việc bắt đầu hoàn thành trên chuỗi chính khi không bận.

Vấn đề với bộ đếm thời gian này trong ứng dụng bảng điều khiển là trong khi bộ đếm thời gian đang đánh dấu dọc theo một chủ đề khác, chủ đề chính không làm gì để ứng dụng đóng lại.

Tôi đã thử thêm một vòng lặp while true, nhưng sau đó chuỗi chính quá bận khi bộ hẹn giờ tắt.

Trả lời

48

Bạn có thể sử dụng một cái gì đó như Console.ReadLine() để chặn luồng chính, vì vậy các chủ đề nền khác (như chuỗi hẹn giờ) sẽ vẫn hoạt động. Bạn cũng có thể sử dụng AutoResetEvent để chặn thực thi, sau đó (khi bạn cần) bạn có thể gọi phương thức Set() trên đối tượng AutoResetEvent đó để giải phóng chuỗi chính. Cũng đảm bảo rằng tham chiếu của bạn đến đối tượng Timer không đi ra khỏi phạm vi và rác thu thập được.

15

Cân nhắc sử dụng ManualResetEvent để chặn luồng chính ở cuối quá trình xử lý và gọi Reset() trên đó sau khi quá trình xử lý của bộ tính giờ kết thúc. Nếu đây là thứ cần phải chạy liên tục, hãy cân nhắc chuyển điều này sang quy trình dịch vụ thay vì ứng dụng bảng điều khiển.

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