133
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
Unregister
của đối tượng
System.Threading.RegisteredWaitHandle
(được trả về bởi phương
thức
RegisterWaitForSingleObject
) được sử dụng để hủy bỏ việc đăng ký.
Lớp thường được dùng làm bộ kích hoạt là
AutoResetEvent
, nó sẽ tự động chuyển sang trạng
thái unsignaled sau khi ở trạng thái signaled. Tuy nhiên, bạn cũng có thể thay đổi trạng thái
signaled theo ý muốn bằng lớp
ManualResetEvent
hay
Mutex
. Ví dụ dưới đây trình bày cách sử
dụng một
AutoResetEvent
để kích hoạt thực thi một phương thức có tên là
EventHandler
.
using System;
using System.Threading;
public class EventExecutionExample {
// Phương thức sẽ được thực thi khi AutoResetEvent đi vào trạng
// thái signaled hoặc quá trình đợi hết thời gian (time-out).
private static void EventHandler(object state, bool timedout) {
// Hiển thị thông báo thích hợp ra cửa sổ Console
// tùy vào quá trình đợi đã hết thời gian hay
// AutoResetEvent đã ở trạng thái signaled.
if (timedout) {
Console.WriteLine("{0} : Wait timed out.",
DateTime.Now.ToString("HH:mm:ss.ffff"));
} else {
Console.WriteLine("{0} : {1}",
DateTime.Now.ToString("HH:mm:ss.ffff"), state);
}
}
public static void Main() {
// Tạo một AutoResetEvent ở trạng thái unsignaled.
AutoResetEvent autoEvent = new AutoResetEvent(false);
// Tạo một thể hiện ủy nhiệm WaitOrTimerCallback
// tham chiếu đến phương thức tĩnh EventHandler.
// EventHandler sẽ được gọi khi AutoResetEvent đi vào
// trạng thái signaled hay quá trình đợi hết thời gian.