(Post 23/11/2007) Cách dễ nhất để thực thi một phương thức theo định kỳ là sử dụng bộ định thời – chẳng hạn như lớp Bộ định thời được cung cấp trong không gian tên System.Threading. Bộ đếm thời gian phân luồng tận dụng lợi thế của nhóm luồng, cho phép tạo nhiều bộ định thời mà không cần nhiều luồng. Timer là một lớp khá đơn giản, với một hàm tạo và chỉ hai phương thức (một niềm vui cho những người theo chủ nghĩa tối giản, cũng như các tác giả sách!)

lớp niêm phong công khai Timer: MarshalByRefObject, IDisposable
{
public Timer (TimerCallback tick, object state, 1st, next);
Thay đổi bool công khai (lần đầu tiên, tiếp theo); // Để thay đổi khoảng thời gian
public void Dispose (); // Để loại bỏ bộ đếm thời gian
}
1st = thời gian cho lần đánh dấu đầu tiên tính bằng mili giây hoặc TimeSpan
tiếp theo = khoảng thời gian tiếp theo tính bằng mili giây hoặc TimeSpan
(sử dụng Timeout. Infinite để gọi lại một lần)
Trong ví dụ sau, bộ đếm thời gian gọi Tick phương thức ghi “đánh dấu …” sau 5 giây trôi qua, sau đó cứ sau mỗi giây – cho đến khi người dùng nhấn Enter:
using System;
sử dụng System.Threading;

class Program {
static void Main () {
Timer tmr = new Timer (Tick, “tick …”, 5000, 1000);
Console.ReadLine ();
tmr.Dispose (); // Kết thúc bộ đếm thời gian
}

static void Tick (object data) {
// Thao tác này chạy trên luồng gộp
Console.WriteLine (data); // Viết “đánh dấu …”
}
}

Khuôn khổ .NET cung cấp một lớp hẹn giờ khác cùng tên trong không gian tên System.Timers. Điều này chỉ đơn giản là kết thúc System.Threading.Timer, cung cấp thêm sự tiện lợi trong khi sử dụng cùng một nhóm luồng – và cùng một công cụ cơ bản. Dưới đây là tóm tắt về các tính năng được bổ sung của nó:

  • Triển khai Thành phần, cho phép nó được đặt trong Visual Studio Designer
  • Thuộc tính Khoảng thời gian thay vì phương thức Thay đổi
  • Sự kiện đã trôi qua thay vì đại biểu gọi lại
  • Thuộc tính Bật để bắt đầu và tạm dừng bộ hẹn giờ (giá trị mặc định của nó là false)
  • Phương thức Bắt đầu và Dừng trong trường hợp bạn bị nhầm lẫn bởi Đã bật
  • cờ Tự động đặt lại để chỉ ra một sự kiện lặp lại (giá trị mặc định là true)

Đây là một ví dụ:

sử dụng Hệ thống;
sử dụng System.Timers; // Không gian tên của bộ định thời chứ không phải của

lớp Threading SystemTimer {
static void Main () {
Timer tmr = new Timer (); // Không yêu cầu bất kỳ args nào
tmr.Interval = 500;
tmr.Elapsed + = tmr_Elapsed; // Sử dụng một sự kiện thay vì một đại biểu
tmr.Start (); // Khởi động bộ đếm thời gian
Console.ReadLine ();
tmr.Stop (); // Tạm dừng bộ đếm thời gian
Console.ReadLine ();
tmr.Start (); // Tiếp tục bộ định thời
Console.ReadLine ();
tmr.Dispose (); // Dừng vĩnh viễn bộ hẹn giờ
}

static void tmr_Elapsed (object sender, EventArgs e) {
Console.WriteLine (“Đánh dấu”);
}
}

Khuôn khổ .NET cung cấp bộ đếm thời gian thứ ba – trong không gian tên System.Windows.Forms. Trong khi tương tự như System.Timers.Timer trong giao diện của nó, nó hoàn toàn khác về mặt chức năng. Bộ đếm thời gian Windows Forms không sử dụng nhóm chủ đề, thay vào đó sẽ kích hoạt sự kiện “Đánh dấu” của nó luôn trên cùng một chuỗi đã tạo bộ hẹn giờ ban đầu. Giả sử đây là luồng chính – cũng chịu trách nhiệm khởi tạo tất cả các biểu mẫu và điều khiển trong ứng dụng Windows Forms – trình xử lý sự kiện của bộ định thời sau đó có thể tương tác với các biểu mẫu và điều khiển mà không vi phạm an toàn luồng – hoặc các áp đặt của luồng căn hộ. Control.Invoke là không bắt buộc.

Bộ đếm thời gian Windows Forms dành cho các công việc có thể liên quan đến việc cập nhật giao diện người dùng và giao diện này thực thi nhanh chóng. Việc thực thi nhanh chóng là rất quan trọng vì sự kiện Tick được gọi trên chuỗi chính – mà nếu bị ràng buộc, sẽ khiến giao diện người dùng không phản hồi.

(Sưu tầm)

0981578920
icons8-exercise-96