无法触发事件(计时器)

本文关键字:计时器 事件 | 更新日期: 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成员的类的引用。