Tôi có một System.Threading.Timer gọi trình xử lý sự kiện thích hợp của nó (gọi lại) mỗi 10 ms. Bản thân phương thức là không reentrant và đôi khi có thể mất chiều dài hơn 10 mili giây. Vì vậy, tôi muốn dừng bộ đếm thời gian trong khi thực thi phương thức.Dừng hẹn giờ trong phương thức gọi lại
Code:
private Timer _creatorTimer;
// BackgroundWorker's work
private void CreatorWork(object sender, DoWorkEventArgs e) {
_creatorTimer = new Timer(CreatorLoop, null, 0, 10);
// some other code that worker is doing while the timer is active
// ...
// ...
}
private void CreatorLoop(object state) {
// Stop timer (prevent reentering)
_creatorTimer.Change(Timeout.Infinite, 0);
/*
... Work here
*/
// Reenable timer
_creatorTimer.Change(10, 0);
}
MSDN khẳng định rằng phương pháp gọi lại được gọi là (mỗi lần cháy timer) trong chủ đề riêng biệt từ các hồ bơi thread. Điều đó có nghĩa là nếu tôi ngừng bộ hẹn giờ thì điều đầu tiên trong phương thức nó vẫn không cần thiết ngăn bộ hẹn giờ kích hoạt và chạy một thể hiện khác của phương thức trước khi người đầu tiên có cơ hội dừng hẹn giờ.
Có lẽ bộ hẹn giờ (hoặc thậm chí chính phương pháp không reentrant) bị khóa? Cách đúng để ngăn bộ hẹn giờ kích hoạt trong khi thực hiện phương thức gọi lại (và không reentrant) của nó là gì?
câu hỏi này có thể giúp bạn ra ngoài http://stackoverflow.com/questions/1116249/manualresetevent-vs-thread-sleep – Kane