不能发射事件(计时器)

时间:2014-07-10 08:54:02

标签: c# events

我在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没有被触发......任何想法为什么?

3 个答案:

答案 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成员的类的引用。 如果它发生,计时器被处理,所以不再有事件......