134
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
WaitOrTimerCallback handler =
new WaitOrTimerCallback(EventHandler);
// Tạo đối tượng trạng thái (được truyền cho phương thức
// thụ lý sự kiện khi nó được kích hoạt). Trong trường hợp
// này, một thông báo sẽ được hiển thị.
string state = "AutoResetEvent signaled.";
// Đăng ký thể hiện ủy nhiệm để đợi AutoResetEvent đi vào
// trạng thái signaled. Thiết lập giá trị time-out là 3 giây.
RegisteredWaitHandle handle =
ThreadPool.RegisterWaitForSingleObject(autoEvent, handler,
state, 3000, false);
Console.WriteLine("Press ENTER to signal the AutoResetEvent" +
" or enter \"Cancel\" to unregister the wait operation.");
while (Console.ReadLine().ToUpper() != "CANCEL") {
// Nếu "Cancel" không được nhập vào Console,
// AutoResetEvent sẽ đi vào trạng thái signal,
// và phương thức EventHandler được thực thi.
// AutoResetEvent sẽ tự động trở về trạng thái unsignaled.
autoEvent.Set();
}
// Hủy bỏ việc đăng ký quá trình đợi.
Console.WriteLine("Unregistering wait operation.");
handle.Unregister(null);
// Nhấn Enter để kết thúc.
Console.WriteLine("Main method complete. Press Enter.");
Console.ReadLine();
}
}