2014-07-10 141 views
0

我有一個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沒有被解僱......任何ideias爲什麼?

+0

剛剛測試過您的代碼。它適用於我....你確定它執行「做一些東西第1部分」的代碼? – User999999

回答

0

您需要使用:

Thread.Sleep(5000); 

但首先你需要添加

using System.Threading; 

或使用

System.Threading.Thread.Sleep(5000); 

在5000上失去參閱包含timerDelayWatcher成員的類以毫秒爲單位

樣本的時間

private void timerDelayWatcher_Tick(object sender, EventArgs e) 
    { 

     timerDelayWatcher.Stop(); 

     System.Threading.Thread.Sleep(5000); 

      .......Do some stuff part2 

    } 
+0

這解決了這個問題,但我仍然不知道爲什麼我的代碼不工作。謝謝 :) –

0

嘗試首先調用system.timers.timer的啓動方法,並且我會建議堅持一種類型的計時器和使用模式,比如說使用system.timer.timer並完成所需的工作,然後重新啓動並等待下一個過期事件。

如果不是這樣,我建議看在.NET 4/4.5任務庫和異步流動和使用作爲@Ferri表明睡眠

+0

它已經這樣做了,不是嗎? –

0

採取也不在意。 如果發生這種情況,定時器不會再發生事件...