130
Chương 4: Tiểu trình, tiến trình, và sự đồng bộ
Khi tạo một đối tượng
Timer
, bạn cần chỉ định hai thời khoảng (thời khoảng có thể được chỉ
định là các giá trị kiểu
int
,
long
,
uint
, hay
System.TimeSpan
):
•
Giá trị đầu tiên là thời gian trễ (tính bằng mili-giây) để phương thức của bạn được thực
thi lần đầu tiên. Chỉ định giá trị
0
để thực thi phương thức ngay lập tức, và chỉ định
System.Threading.Timeout.Infinite
để tạo
Timer
ở trạng thái chưa bắt đầu
(unstarted).
•
Giá trị thứ hai là khoảng thời gian mà
Timer
sẽ lặp lại việc gọi phương thức của bạn sau
lần thực thi đầu tiên. Nếu bạn chỉ định giá trị
0
hay
Timeout.Infinite
thì
Timer
chỉ thực
thi phương thức một lần duy nhất (với điều kiện thời gian trễ ban đầu không phải là
Timeout.Infinite
). Đối số thứ hai có thể cung cấp bằng các trị kiểu
int
,
long
,
uint
,
hay
System.TimeSpan
.
Sau khi tạo đối tượng
Timer
, bạn cũng có thể thay đổi các thời khoảng được sử dụng bởi
Timer
bằng phương thức
Change
, nhưng bạn không thể thay đổi phương thức sẽ được gọi. Khi đã
dùng xong
Timer
, bạn nên gọi phương thức
Timer.Depose
để giải phóng tài nguyên hệ thống
bị chiếm giữ bởi
Timer
. Việc hủy
Timer
cũng hủy luôn phương thức đã được định thời thực
thi.
Lớp
TimerExample
dưới đây trình bày cách sử dụng
Timer
để gọi một phương thức có tên là
TimerHandler
. Ban đầu,
Timer
được cấu hình để gọi
TimerHandler
sau hai giây và lặp lại sau
một giây. Ví dụ này cũng trình bày cách sử dụng phương thức
Timer.Change
để thay đổi các
thời khoảng.
using System;
using System.Threading;
public class TimerExample {
// Phương thức sẽ được thực khi Timer hết hiệu lực.
// Hiển thị một thông báo ra cửa sổ Console.
private static void TimerHandler(object state) {
Console.WriteLine("{0} : {1}",
DateTime.Now.ToString("HH:mm:ss.ffff"), state);
}
public static void Main() {
// 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.