我在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没有被触发......任何想法为什么?
答案 0 :(得分:0)
首先尝试在system.timers.timer上调用start方法,我建议坚持使用一种类型的计时器和使用模式,比如使用system.timer.timer并完成你需要的工作,然后重启并等待下一个已经过去的事件。
或者我建议在.net 4 / 4.5中查看任务库和异步流,并且@Ferri建议使用睡眠
答案 1 :(得分:0)
您需要使用:
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
}
答案 2 :(得分:0)
还要注意放弃对包含timerDelayWatcher成员的类的引用。 如果它发生,计时器被处理,所以不再有事件......