C#如何在两个定时器周期之间运行延迟方法
本文关键字:周期 定时器 之间 运行 方法 延迟 两个 | 更新日期: 2023-09-27 18:00:55
我使用计时器每16分钟运行一个方法。我还想每分钟运行一个第二个方法,间隔15分钟。
以下是我正在使用的代码:
int count = 0;
private void cmdGo_Click(object sender, EventArgs e)
{
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Interval = 960000; // specify interval time - 16 mins
t.Tick += new EventHandler(timer_Tick);
t.Start();
}
void timer_Tick(object sender, EventArgs e)
{
RunMethod1();
while(count < 15)
{
//waiting for 60 seconds
DateTime wait = DateTime.Now;
do
{
Application.DoEvents();
} while (wait.AddSeconds(60) > DateTime.Now);
RunMethod2();
}
}
上面的代码似乎工作得很好,但等待60秒的"do-while"循环占用了大量CPU。
我尝试使用Thread.Sleep(60000(,但这冻结了接口,还尝试在timer_Tick中添加第二个计时器,但这似乎不可能。能否在第一个计时器的EventHandler中添加第二个计时器?
有没有其他方法可以在不占用CPU的情况下实现这一点?
谢谢!Warren
注意:对不起,伙计们,我原来的帖子中有一个拼写错误。60秒的等待do,while循环应该在while<15循环。刚刚更新了代码片段。
因此:
- RunMethod1((应每16分钟执行一次
- RunMethod2((应在16分钟刻度之间每隔1分钟(15次(执行一次
如果有一个计数器来存储时钟关闭的次数,那就更有意义了。然后将计时器间隔设置为每分钟启动一次,这样就不会在两者之间做任何事情。。。
这样你就可以做…
private int Counter;
private void cmdGo_Click(object sender, EventArgs e)
{
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Interval = 60000; // specify interval time - 1 minute
t.Tick += new EventHandler(timer_Tick);
t.Start();
}
// Every 1 min this timer fires...
void timer_Tick(object sender, EventArgs e)
{
// If it has been 16 minutes then run RunMethod1
if (++Counter >= 16)
{
Counter = 0;
RunMethod1();
return;
}
// Not yet been 16 minutes so just run RunMethod2
RunMethod2();
}
您可以await
一个任务延迟,这样UI将继续响应
async void timer_Tick(object sender, EventArgs e)
{
RunMethod1();
while (count < 15)
{
//waiting for 60 seconds
await Task.Delay(60000);
RunMethod2();
}
}