2011-05-29 44 views
37

Tôi có ứng dụng Windows Forms được viết bằng C#. Chức năng sau đây kiểm tra bất cứ khi nào máy in trực tuyến hay không:Thực hiện chức năng được chỉ định mỗi X giây

public void isonline() 
{ 
    PrinterSettings settings = new PrinterSettings(); 
    if (CheckPrinter(settings.PrinterName) == "offline") 
    { 
     pictureBox1.Image = pictureBox1.ErrorImage; 
    } 
} 

và cập nhật hình ảnh nếu máy in ngoại tuyến. Bây giờ, làm thế nào tôi có thể thực hiện chức năng này isonline() cứ sau 2 giây vì vậy khi tôi rút phích cắm máy in, hình ảnh được hiển thị trên biểu mẫu (pictureBox1) biến thành một cái khác mà không cần khởi chạy lại ứng dụng hoặc thực hiện kiểm tra thủ công? (ví dụ: bằng cách nhấn nút "Làm mới" chạy chức năng isonline())

+6

bỏ phiếu không phải là một ý tưởng tuyệt vời. Tốt hơn là lắng nghe thông báo thay đổi trạng thái nếu có thông báo. –

+1

có thể trùng lặp [Thực thi thao tác mỗi x giây trong y phút trong C#] (http://stackoverflow.com/questions/786672/execute-an-operation-every-x-seconds-for-y-minutes-in- c) –

Trả lời

78

Sử dụng System.Windows.Forms.Timer.

private Timer timer1; 
public void InitTimer() 
{ 
    timer1 = new Timer(); 
    timer1.Tick += new EventHandler(timer1_Tick); 
    timer1.Interval = 2000; // in miliseconds 
    timer1.Start(); 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    isonline(); 
} 

Bạn có thể gọi InitTimer() trong Form1_Load().

+0

điều này chỉ hoạt động. Cảm ơn rất nhiều. – technology

+0

Điều này sẽ được thực hiện tự động sau khi bắt đầu ứng dụng? Nó hoạt động không phải cho tôi như thế. Bạn có thể đề xuất một số giải pháp? Cảm ơn bạn – user2886091

+0

@ user2886091: Miễn là bộ hẹn giờ không được xử lý hoặc dừng nó sẽ hoạt động – Stecya

3

Bạn có thể thực hiện việc này một cách dễ dàng bằng cách thêm Bộ hẹn giờ vào biểu mẫu của bạn (từ nhà thiết kế) và đặt chức năng Tick-function để chạy hàm isonline của bạn.

5

Giải pháp hầu hết người mới bắt đầu thân thiện là:

Kéo một Timer từ hộp công cụ, cung cấp cho nó một tên, thiết lập mong muốn Interval và thiết lập "Enabled" True của bạn. Sau đó, nhấp đúp vào Bộ hẹn giờ và Visual Studio (hoặc bất kỳ thứ gì bạn đang sử dụng) sẽ viết cho bạn Mã sau:

private void wait_Tick(object sender, EventArgs e) 
    { 
     refreshText(); //add the method you want to call here. 
    } 

. Không cần phải lo lắng dán nó vào khối mã sai hoặc một cái gì đó như thế này.

0

Tôi đã tải lên một gói NuGet có thể làm cho nó đơn giản như vậy, bạn có thể có nó từ đây OpenJobScheduler

Và đây làm thế nào để bắt đầu sử dụng nó

using OpenJobScheduler; 

var jobScheduler = new JobScheduler(TimeSpan.FromMinutes(8), new Action(() => { 
    //What you want to execute 
})); 

jobScheduler.Start(); // To Start up the Scheduler 

jobScheduler.Stop(); // To Stop Scheduler from Running. 
+0

Xin chào, hãy thử cài đặt nuget, nhưng nó không có sẵn cho .NET 4.5.2, phiên bản đó là gì? – avechuche

+1

Nó hỗ trợ .NET Standard 2.0 –

+1

@avechuche để nó hỗ trợ .NET 4.6.1 trở lên –

Các vấn đề liên quan