Đánh giá, nhận xét, review các công ty tuyển dụng
Từ 1 tới 3 trên tổng số 3 kết quả

Đề tài: Thực thi phương thức bằng Timer trong lập trình C#

  1. #1
    No Avatar
    baokhanhk28 Khách

    Mặc định Thực thi phương thức bằng Timer trong lập trình C#

    ? Bạn cần thực thi một phương thức trong một tiểu trình riêng theo chu kỳ hay ở một thời điểm xác định.
    » Khai báo một phương thức trả về void và chỉ nhận một đối tượng làm đối số. Sau đó, tạo một thể hiện ủy nhiệm System.Threading.TimerCallback tham chiếu đến phương thức này. Tiếp theo, tạo một đối tượng System.Threading.Timer và truyền nó cho thể hiện ủy nhiệm TimerCallback cùng với một đối tượng trạng thái mà Timer sẽ truyền cho phương thức của bạn khi Timer hết hiệu lực. Bộ thực thi sẽ chờ cho đến khi Timer hết hiệu lực và sau đó gọi phương thức của bạn bằng một tiểu trình trong thread-pool.
    Thông thường, rất hữu ích khi thực thi một phương thức ở một thời điểm xác định hay ở những thời khoảng xác định. Ví dụ, bạn cần sao lưu dữ liệu lúc 1:00 AM mỗi ngày hay xóa vùng đệm dữ liệu mỗi 20 phút. Lớp Timer giúp việc định thời thực thi một phương thức trở nên dễ dàng, cho phép bạn thực thi một phương thức được tham chiếu bởi ủy nhiệm TimerCallback ở những thời khoảng nhất định. Phương thức được tham chiếu sẽ thực thi trong ngữ cảnh của một tiểu trình trong thread-pool.
    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.
    Visual C# Code:
    1. using System;
    2. using System.Threading;
    3.  
    4. public class TimerExample {
    5.  
    6.     // Phương thức sẽ được thực khi Timer hết hiệu lực.
    7.     // Hiển thị một thông báo ra cửa sổ Console.
    8.     private static void TimerHandler(object state) {
    9.  
    10.         Console.WriteLine("{0} : {1}",
    11.             DateTime.Now.ToString("HH:mm:ss.ffff"), state);
    12.     }
    13.  
    14.     public static void Main() {
    15.  
    16.         // Tạo một thể hiện ủy nhiệm TimerCallback mới
    17.         // tham chiếu đến phương thức tĩnh TimerHandler.
    18.         // TimerHandler sẽ được gọi khi Timer hết hiệu lực.
    19.         TimerCallback handler = new TimerCallback(TimerHandler);
    20.  
    21.         // Tạo một đối tượng trạng thái, đối tượng này sẽ được
    22.         // truyền cho phương thức TimerHandler.
    23.         // Trong trường hợp này, một thông báo sẽ được hiển thị.
    24.         string state = "Timer expired.";
    25.  
    26.         Console.WriteLine("{0} : Creating Timer.",
    27.             DateTime.Now.ToString("HH:mm:ss.ffff"));
    28.  
    29.         // Tạo một Timer, phát sinh lần đầu tiên sau hai giây
    30.         // và sau đó là mỗi giây.
    31.         using (Timer timer = new Timer(handler, state, 2000, 1000)) {
    32.  
    33.             int period;
    34.  
    35.             // Đọc thời khoảng mới từ Console cho đến khi
    36.             // người dùng nhập 0. Các giá trị không hợp lệ
    37.             // sẽ sử dụng giá trị mặc định là 0 (dừng ví dụ).
    38.             do {
    39.  
    40.                 try {
    41.                     period = Int32.Parse(Console.ReadLine());
    42.                 } catch {
    43.                     period = 0;
    44.                 }
    45.  
    46.                 // Thay đổi Timer với thời khoảng mới.
    47.                 if (period > 0) timer.Change(0, period);
    48.  
    49.             } while (period > 0);
    50.         }
    51.  
    52.         // Nhấn Enter để kết thúc.
    53.         Console.WriteLine("Main method complete. Press Enter.");
    54.         Console.ReadLine();
    55.     }
    56. }
    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:
    Visual C# Code:
    1. public static void RunAt(DateTime execTime) {
    2.  
    3.     // Tính khoảng thời gian từ thời điểm hiện tại
    4.     // đến thời điểm cần thực thi.
    5.     TimeSpan waitTime = execTime - DateTime.Now;
    6.  
    7.     if (waitTime < new TimeSpan(0)) waitTime = new TimeSpan(0);
    8.  
    9.     // Tạo một thể hiện ủy nhiệm TimerCallback mới
    10.     // tham chiếu đến phương thức tĩnh TimerHandler.
    11.     // TimerHandler sẽ được gọi khi Timer hết hiệu lực.
    12.     TimerCallback handler = new TimerCallback(TimerHandler);
    13.  
    14.     // Tạo một Timer chỉ phát sinh một lần tại thời điểm
    15.     // được chỉ định. Chỉ định thời khoảng thứ hai là -1
    16.     // để ngăn Timer thực thi lặp lại phương thức.
    17.     new Timer(handler, null, waitTime, new TimeSpan(-1));

    Trích từ "Các giải pháp lập trình C#"

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    TP.Trà Vinh
    Bài viết
    1

    Mặc định Thảo luận về C#

    có bạn nào biết về cách cộng hai cái datetimePicker lại với nhau để biết kết quả hai ngày đó chênh lệch bao nhiêu kể cả ngày lẫn giờ luôn
    vd đơn giản thôi :
    datetimePicker 1 ngày 11/06/2011 12:00:5
    datetimePicker 2 ngày 12/06/2011 13:00:10
    kết quả là 1 ngày 1h lẽ 5sCảm ơn các bạn trước nha,vì mình đang làm đồ án quản lý nhân sự,tới phần tình tổng số ngày làm việc của Nhân Viên để tinh lương nhưng tới đây mình đã bó tay rồi.Xin chỉ giáo0

  3. #3
    Ngày gia nhập
    02 2011
    Nơi ở
    Hồ Chí Minh
    Bài viết
    136

    Thanks baokhanhk28 đã cho tutorials hay về Timer ./.

    Trích dẫn Nguyên bản được gửi bởi anhhungbanchim Xem bài viết
    có bạn nào biết về cách cộng hai cái datetimePicker lại với nhau để biết kết quả hai ngày đó chênh lệch bao nhiêu kể cả ngày lẫn giờ luôn
    vd đơn giản thôi :
    datetimePicker 1 ngày 11/06/2011 12:00:5
    datetimePicker 2 ngày 12/06/2011 13:00:10
    kết quả là 1 ngày 1h lẽ 5sCảm ơn các bạn trước nha,vì mình đang làm đồ án quản lý nhân sự,tới phần tình tổng số ngày làm việc của Nhân Viên để tinh lương nhưng tới đây mình đã bó tay rồi.Xin chỉ giáo0
    Bạn làm thế này:
    label1.Text = ((TimeSpan)(dateTimePicker2.Value - dateTimePicker1.Value)).ToString();

Các đề tài tương tự

  1. [B]Cách sử dụng Timer trong ASP.NET(C#)[/B]
    Gửi bởi tanhien90vn trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 11-04-2012, 11:12 AM
  2. Sử dụng Timer để lấy giờ hệ thống trong lập trình C#
    Gửi bởi jack trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 11
    Bài viết cuối: 16-03-2012, 06:30 PM
  3. làm sao để timer chờ cho button thực hiện hết lệnh rồi thì timer lặp tiếp
    Gửi bởi chitviv trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 19-07-2011, 04:14 PM
  4. sử dụng timer như thế nào trong lập trình C#?
    Gửi bởi tan_hoa_2322 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 19-11-2010, 05:16 PM
  5. Cách sử dụng Timer trong C# như thế nào?
    Gửi bởi ngochan011290 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 6
    Bài viết cuối: 30-09-2010, 09:33 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn