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

132
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ

Mặc dù

Timer

thường được sử dụng để gọi thực thi các phương thức ở những thời khoảng,

nhưng nó cũng cung cấp cách thức để thực thi một phương thức ở một thời điểm xác định.
Bạn cần phải tính toán khoảng thời gian từ thời điểm hiện tại đến thời điểm cần thực thi. Ví dụ
dưới đây sẽ thực hiện điều này:

public static void RunAt(DateTime execTime) {

// Tính khoảng thời gian từ thời điểm hiện tại

// đến thời điểm cần thực thi.

TimeSpan waitTime = execTime - DateTime.Now;

if (waitTime < new TimeSpan(0)) waitTime = new TimeSpan(0);

// Tạo một thể hiện ủy nhiệm TimerCallback mới

// tham chiếu đến phương thức tĩnh TimerHandler.

// TimerHandler sẽ được gọi khi Timer hết hiệu lực.

TimerCallback handler = new TimerCallback(TimerHandler);

// Tạo một Timer chỉ phát sinh một lần tại thời điểm

// được chỉ định. Chỉ định thời khoảng thứ hai là -1

// để ngăn Timer thực thi lặp lại phương thức.

new Timer(handler, null, waitTime, new TimeSpan(-1));

}

4.

4.

Th c thi ph

ng th c b ng cách ra hi u đ i t

ng WaitHandle

ươ

ứ ằ

ệ ố ượ

Th c thi ph

ng th c b ng cách ra hi u đ i t

ng WaitHandle

ươ

ứ ằ

ệ ố ượ

Bạn muốn thực thi một hay nhiều phương thức một cách tự động khi một đối
tượng dẫn xuất từ lớp

System.Threading.WaitHandle

đi vào trạng thái signaled.

Tạo một thể hiện ủy nhiệm

System.Threading.WaitOrTimerCallback

tham chiếu

đến phương thức cần thực thi. Sau đó, đăng ký thể hiện ủy nhiệm và đối tượng

WaitHandle

với thread-pool bằng phương thức tĩnh

ThreadPool.

RegisterWaitForSingleObject

.

Bạn có thể sử dụng các lớp dẫn xuất từ

WaitHandle

(đã được thảo luận trong mục 4.2) để gọi

thực thi một phương thức. Bằng phương thức

RegisterWaitForSingleObject

của lớp

ThreadPool

, bạn có thể đăng ký thể hiện ủy nhiệm

WaitOrTimerCallback

với thread-pool khi

một đối tượng dẫn xuất từ

WaitHandle

đi vào trạng thái signaled. Bạn có thể cấu hình thread-

pool để thực thi phương thức chỉ một lần hay tự động đăng ký lại phương thức mỗi khi

WaitHandle

đi vào trạng thái signaled. Nếu

WaitHandle

đã ở trạng thái signaled khi bạn gọi

RegisterWaitForSingleObject

, phương thức sẽ thực thi ngay lập tức. Phương thức

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.