Thứ Sáu, 22 tháng 3, 2013

Sử dụng Timer Control trong C#

Trong bài viết này chúng ta sẽ tìm hiểu một project đơn giản để giải thích cách làm viêc của lớp Timer và cách viết sự kiện cho điều khiển này. Timer control cho phép bạn thiết lập một khoảng thời gian để thực thi một sự kiện sau một khoảng thời gian...

Trong bài viết này chúng ta sẽ tìm hiểu một project đơn giản để giải thích cách làm viêc của lớp Timer và cách viết sự kiện cho điều khiển này.

Timer control cho phép bạn thiết lập một khoảng thời gian để thực thi một sự kiện sau một khoảng thời gian liên lục. Nó rất hữu dụng khi bạn cần thực thi chắc chắn một chương trình ứng dụng sau một khoảng thời gian chính xác, như khi bạn cần tạo một bản sao lưu (backup) dữ liệu trong vài giờ. Bạn có thể tạo một hàm thực hiện việc sao lưu lại dữ liệu và gọi nó qua một sự kiện sau đó thiết lập thời gian cho nó .

Sử dụng timer control là điều không khó. Để thử với control này bạn cần tạo một ứng dụng Windows Application trong Visual Studio và thêm vào Form 2 button controls. Sau đó thay đổi thuộc tính Text của chúng là Start và Stop như bạn thấy trong hình sau :




Trong chương trình này tôi đã tạo thêm một file mcb.txt trong thư mục máy của tôi (C:\temp) và bắt đầu ghi lại thời gian sau mỗi khoảng 5 giây.

Bây giờ bạn có thể kéo 1 timer control từ toolbox đến Form. Bạn có thể thiết lập các thuộc tính cho nó trong chương trình của bạn. Chúng ta để nó là 5000 milliseconds hay bằng 5 giây.

Bây giờ bạn Click lên button Event và viết sự kiện Click của timer như bạn thấy trong hình 


Bây giờ chúng ta sẽ thêm một FileStream và một đối tượng StreamWriter bên trong lớp. Như bạn đã thấy từ đoạn code, lớp FileStream tạo một file mcb.txt và StreamWriter dùng để ghi nội dung vào file.



  1. private static FileStream fs = new FileStream(@"c:\temp\mcb.txt", FileMode.OpenOrCreate, FileAccess.Write);  

  2. private static StreamWriter m_streamWriter = new StreamWriter(fs);  



Bây giờ bạn sử dụng đoạn code sau cho sự kiện Load của Form:



  1. private void Form1_Load(object sender, System.EventArgs e)  

  2. {  

  3. // Write to the file using StreamWriter class  

  4. m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);  

  5. m_streamWriter.Write(" File Write Operation Starts : ");  

  6. m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());  

  7. m_streamWriter.WriteLine(" ===================================== \n");  

  8. m_streamWriter.Flush();  

  9. }   



Đoạn code này sẽ thực hiện ghi vài dòng vào 1 file mcb.txt.

Bây giờ ta sẽ viết code cho sự kiện Click của hai button. Khi bạn click vào Start button sẽ thiết lập thuộc tính Enable của timer là true. Sau đó chúng ta thiết lập cho sự kiên click của button Stop để dừng lại sự kiện tick của timer:



  1. private void button1_Click(object sender, System.EventArgs e)  

  2. {  

  3. timer1.Enabled = true;  

  4. }  

  5. private void button2_Click(object sender, System.EventArgs e)  

  6. {  

  7. timer1.Enabled = false;  

  8. }  



Bước tiếp theo bạn có thể viết code cho sự kiện tick của timer



  1. private void timer1_Tick(object sender, System.EventArgs e)  

  2. {  

  3. m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());  

  4. m_streamWriter.Flush();  

  5. }  



Bây giờ có thể sử dụng Start và Stop button để bắt đầu và kết thúc timer. Kết quả của file mcb.txt có thể thấy như hình dưới:



Nếu bạn không có Visual Studio.NET bạn cũng có thể viết đơn giản như vậy và làm theo những bước sau .

Tạo 1 thể hiện của Timer

Phương thức khởi tạo của lớp Timer sử dụng một đối tượng timer. Contructor này được overloaded:



  1. public Timer()  

  2. public Timer(double)   



Ở đây cũng có thể tạo 1 với thời gian khoảng 5 giây như mã sau:



  1. Timer myTimer = new Timer(500);  



Dưới đây là một số thành phần hữu dụng của lớp Timer:

Tick ===> Sự kiện xảy ra khi khoảng thời gian trôi qua
Start ===> Bắt đầu sự kiện tick bởi việc xét Enable là true
Stop ===> Bắt đầu sự kiện tick bởi việc xét Enable là false
Close ===> Giải phóng tài nguyên sử dụng bởi timer 
AutoReset ===>Cho biết ở đây sẽ đưa lên Timer sự kiện Tick mỗi khoảng thời gian được chỉ hoặc sự kiện tick được đưa lên lần đầu
Interval ===> Chỉ khoảng thời gian đưa lên sự kiên Tick
Enable ===> Chỉ ở đây ta sẽ đưa lên Timer sự kiện Tick .

Làm thế nào để sử dụng lớp Timer để đưa 1 sự kiện lên trong 1 khoảng thời gian chính xác



  1. timer1.Interval = 5000;  

  2. timer1.Enabled = true;  

  3. timer1.Tick += new System.EventHandler (OnTimerEvent); 



Viết sự kiện một cách thủ công

Sự kiện này sẽ thực thi sau mỗi 5 giây:



  1. public static void OnTimerEvent(object source, EventArgs e)  

  2. {  

  3. m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());  

  4. m_streamWriter.Flush();  

  5. }  



Bạn sử dụng sự kiên Stop và Close để dừng lại Timer và giải phóng bộ nhớ.

0 nhận xét:

Đăng nhận xét