2011-05-29 113 views
37

我有用C#编写的Windows窗体应用程序。以下功能检查打印机是否联机:每X秒执行指定的函数

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

并更新图像,如果打印机处于脱机状态。现在,我怎样才能每2秒钟执行一次isonline()这样的功能,所以当我拔下打印机时,表格(pictureBox1)上显示的图像会变成另一个图像,而无需重新启动应用程序或进行手动检查? (例如通过按下运行isonline()功能的“刷新”按钮)

+6

轮询是不是一个好主意。如果存在状态更改通知,最好倾听。 – 2011-05-29 17:50:51

+1

[在c#中执行一个操作,每隔x秒钟执行一个操作](http://stackoverflow.com/questions/786672/execute-an-operation-every-x-seconds-for-y-minutes-in- c) – 2011-05-29 17:50:56

回答

78

使用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(); 
} 

可以在Form1_Load()调用InitTimer()

+0

这只是工作。非常感谢。 – technology 2011-05-29 17:47:48

+0

这会在应用程序启动后自动执行吗?这不适合我。你能提出一些解决方案吗?谢谢 – user2886091 2014-03-19 08:06:13

+0

@ user2886091:只要定时器不处理或停止,它应该可以工作 – Stecya 2014-03-19 10:21:32

3

您可以通过在窗体中添加一个Timer(来自设计者)并将其设置为Tick函数来运行isonline函数,从而轻松完成此操作。

5

最适合初学者的解决方案是:

从工具箱拖一个计时器,给它一个名称,设置所需的时间间隔,并设置为“Enabled”为True。然后双击计时器和Visual Studio(或任何你正在使用的)会写你下面的代码:

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

那里你去。无需担心将其粘贴到错误的代码块或类似的东西。

0

我已经上传了一个NuGet包,可以使如此简单,你可以从这里OpenJobScheduler

这里有它如何开始使用它

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

你好,试着安装nuget,但它不适用于.NET 4.5.2,它的版本是什么? – avechuche 2017-12-05 16:16:46

+1

它支持.NET标准2.0 – 2017-12-05 19:00:17

+1

@avechuche所以它支持.NET 4.6.1及以上版本 – 2017-12-05 20:16:00