Hẹn giờ đáng tin cậy trong ứng dụng bảng điều khiển


103

Tôi biết rằng trong .NET có ba loại bộ hẹn giờ (xem So sánh các lớp bộ định thời trong Thư viện lớp .NET Framework ). Tôi đã chọn một bộ đếm thời gian có luồng vì các loại khác có thể bị trôi nếu luồng chính đang bận và tôi cần điều này đáng tin cậy.

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

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

Tôi đã thử thêm một while truevòng lặp, nhưng sau đó luồng chính quá bận khi bộ hẹn giờ hoạt động.

Câu trả lời:


59

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 luồng nền khác (như luồng hẹn giờ) sẽ vẫn hoạt động. Bạn cũng có thể sử dụng AutoResetEvent để chặn việc thực thi, sau đó (khi cần) bạn có thể gọi phương thức Set () trên đối tượng AutoResetEvent đó để giải phóng luồng chính. Đồng thời đảm bảo rằng tham chiếu của bạn đến đối tượng Timer không nằm ngoài phạm vi và rác được thu thập.


20

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.