Jump to content

Welcome to [ iT ] Forums
Register now to gain access to all of our features. Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, post status updates, manage your profile and so much more. If you already have an account, login here - otherwise create an account for free today!
MU Moi ra - MU SS2

MU Moi ra - MU SS2

Hình ảnh

Làm việc với Timer Control trong C#

- - - - -

  • Please log in to reply
4 replies to this topic

#1
PhươngĐiệp2410

PhươngĐiệp2410

    Thạc sĩ CSTH

  • VIP
  • PipPipPipPipPip
  • 1917 Bài Viết:
Tác Giả : Mahesh Chand
Dịch bởi PhươngĐiệp2410

Làm việc với Timer Control trong C#

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

Timer control cho phép bạn xét 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 là 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 . Cũng có thể nói như khi bạn cần tạo một bản sao lưu (backup) của quá trình của dữ liệu trong vài giờ .Bạn có thể làm nó như 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 đó xét thời gian cho nó .

Sử dụng timer control là 1 điều không khó . Để kiểm tra control này bạn cần tạo một Windows Application . Tôi cũng làm và đã thêm vào Form của mình 2 button controls sau đó thay đổi thuộc tính text của chúng là Start Stop như bạn thấy trong hình sau :
Posted Image

Trong chương trình này tôi đã tạo thêm một file mcb.txt trong thư mục trong máy của tôi (C:\temp) và bắt đầu viết 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ể xét các thuộc tính cho nó trong chương trình của bạn .Bạn có thể thấy như trong hình
Tôi để vào đó 5000 milliseconds (5 giây)
Bạn có thể để nó là 1000 milliseconds nếu khả năng toán học của bạn chưa tốt .
Posted Image
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

Posted Image
Bây giờ tôi sẽ thêm một FileStream và một đối tượng StreamWriter trong điểm bắt đầu của 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 để viết một file .

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

Bây giờ bạn hãy viết đoạn code sau cho sự kiện Load của Form

private void Form1_Load(object sender, System.EventArgs e)
{
// Write to the file using StreamWriter class
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
m_streamWriter.Write(" File Write Operation Starts : ");
m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());
m_streamWriter.WriteLine(" ===================================== \n");
m_streamWriter.Flush();
}
Như bạn đã thấy từ đoạn code trên , đoạn code này sẽ viết một vài dòng đến 1 file
Bây giờ ta sẽ viết code cho sự kiện Click của hai button . Bạn có thể thấy trong đoạn code này . Việc click vào Start button sẽ xét thuộc tính Enable của timer là true .Sau đó tôi xét cho sự kiên click của button Stop để dừng lại sự kiện tick của timer

private void button1_Click(object sender, System.EventArgs e)
{
timer1.Enabled = true
;
}
private void button2_Click(object
sender, System.EventArgs e)
{
timer1.Enabled = false
;
}

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

private void timer1_Tick(object sender, System.EventArgs e)
{
m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());
m_streamWriter.Flush();
}

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ư dưới


Posted Image

Sử dụng Timer control theo chương trình (Programmatically)

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

Public Timer()
Public Timer(double
)

Ở đây cũng có thể tạo 1 với thời gian khoảng 5 giây

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

timer1.Interval = 5000;
timer1.Enabled = true
;
timer1.Tick += new
System.EventHandler (OnTimerEvent);

Viết sự kiện bằng tay

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

public static void OnTimerEvent(object source, EventArgs e)
{
m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());
m_streamWriter.Flush();
}

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

Hết !
Thân! =D>


Bài viết này được chỉnh sửa bởi PhươngĐiệp2410: 19 March 2008 - 03:52 PM

http://winsocks.net/

Are You looking for a good socks 5 service? But you don't know where to buy?
Welcome to WinSocks.Net - Crazy Socks Service
Here we provide Fresh Socks 5 with fast speed , less blacklist, especially price is cheaper than others service.
More over, if you want to test our socks 5 before buying, don't be hesitate to contact our supporter through yahoo to receive Free Socks 5

#2
Thien Huy

Thien Huy

    Căn bản tin học tốt

  • Advance Member
  • Pip
  • 90 Bài Viết:
Rất hữu ích !
mình thấy cái timer này trong C# nhưng hok biết use nó ra sao !
dzờ thì cũng biết sơ sơ rùi!
thanks
Đời đổi thay khi ta biết thay đổi

#3
alozng

alozng

    Trình độ A CSTH

  • Advance Member
  • PipPip
  • 150 Bài Viết:
cho hỏi: các dữ liệu giống trong ví dụ của cậu.

private void timer1_Tick(object sender, System.EventArgs e)
{
timer1.Interval = 5000; //5 giây Stick một lần
m_streamWriter.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),DateTime.Now.ToLongDateString());
m_streamWriter.Flush();
}
như vậy timer lúc nào cũng chiếm bộ nhớ. có cách nào đặt 5s một lần, sau đó giải phóng bộ nhớ rồi 5s sau lại bật timer lên ko ?
có kĩ thuật nào khi sài timer ko ?
timer1.Close đc sử dụng khi nào ? //Chả lẽ sài timer rùi mà còn ngồi click bật timer sao ?

#4
Dark

Dark

    Trung cấp CSTH

  • Advance Member
  • PipPipPip
  • 384 Bài Viết:
Timer của C# sử dụng worker thread trong ThreadPool, ThreadPool thì số lượng Worker Thread có hạn, nếu so với Thread thì performance của Timer ko bằng.

Nói về độ chính xác, Timer của .NET Framework ko bao giờ chính xác như của C, cũng giống như Java thôi. Ai muốn kiểm chứng có thể thử Timer của SDL.NET, Timer của .NET thua xa lắc. Timer SDL.NET chỉ lệch vài chục Tick, Timer của .NET lệch vài ngàn Tick là ít.

Trước đây khi làm bảng điện tử chứng khoán, phải dùng thread đọc dữ liệu liên tục, tui thấy Timer ngốn rất nhiều resource (cao hơn 25% -> 50% so với dùng Thread) và thỉnh thoảng lại gây crash chương trình, mọi chuyện lại OK khi chuyển thành Thread.

Nói chung ko có cảm tình với thằng này lắm, sử dụng Thread nhẹ hơn.

Bài viết này được chỉnh sửa bởi Dark: 22 January 2010 - 05:05 PM

(>'.')> Dark <('.'<)

#5
KeCoDontv

KeCoDontv

    Thành viên mới

  • Newbies
  • 2 Bài Viết:
Bạn ơi hiện mình đang gặp 1 bài tập khó trong c#:
- VIẾT CHƯƠNG TRÌNH TẮT MÁY SAO 5 GIÂY VỚI SỰ KIỆN TIMER TRONG C#(SỬ DỤNG NÚT START VÀ STOP )
- VIẾT HÀM ĐỔI MÀU HÌNH ĐƯỜNG THẲNG SAO KHI VẺ MỖI 5 GIÂY.
2 CÁI ĐIỀU SỬ DỤNG SỰ KIỆN TIMER.
BẠN CÓ THỂ GIÚP MÌNH VIẾT CODE ĐÓ DC KO?MÌNH CHẢ BIẾT RÀNH VỀ CÁI NÀY
XIN CẢM ƠN






Balloon vs. Thorns

MU Phuc Hung

Làm Việc Tài Nhà

Mu Da Nang

Tuyển Nhân Viên Bán Hàng

Tư vấn sức khỏe trực tuyến