无法触发事件(计时器)
本文关键字:计时器 事件 | 更新日期: 2023-09-27 18:12:28
我在winform中有一个函数,每x次执行一次(例如:每60分钟一次)。
然后它做一些事情,然后我想让它等待几秒钟(使用计时器)然后执行做一些事情part2。
private void goToFtp(int time)
{
double interval = time* 60 * 1000;
System.Timers.Timer checkForTime = new System.Timers.Timer(interval);
checkForTime.Elapsed += new ElapsedEventHandler(checkForTime_Elapsed);
checkForTime.Enabled = true;
}
System.Windows.Forms.Timer timerDelayWatcher = new System.Windows.Forms.Timer();
private void checkForTime_Elapsed(object sender, ElapsedEventArgs e)
{
.......Do some stuff part1
timerDelayWatcher.Tick += new EventHandler(timerDelayWatcher_Tick); // Everytime timer ticks, timer_Tick will be called
timerDelayWatcher.Interval = (1000) * (5);
timerDelayWatcher.Enabled = true;
timerDelayWatcher.Start();
}
private void timerDelayWatcher_Tick(object sender, EventArgs e)
{
timerDelayWatcher.Stop();
.......Do some stuff part2
}
问题是timerDelayWatcher_Tick没有被触发…知道为什么吗?
你需要使用:
Thread.Sleep(5000);
但是首先你需要添加
using System.Threading;
或使用
System.Threading.Thread.Sleep(5000);
on 5000的时间以毫秒为单位
示例private void timerDelayWatcher_Tick(object sender, EventArgs e)
{
timerDelayWatcher.Stop();
System.Threading.Thread.Sleep(5000);
.......Do some stuff part2
}
首先尝试在system.timer.timer上调用start方法,我建议坚持使用一种类型的计时器和使用模式,例如使用system.timer.timer并在elapsed时执行所需的工作,然后重新启动并等待下一个elapsed事件。
或者我建议看看。net 4/4.5中的任务库和异步流,正如@Ferri建议使用Sleep
还要注意丢失对包含timerDelayWatcher成员的类的引用。