CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 133

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.