Dot-Net

我可以在其回調中處理 Threading.Timer 嗎?

  • December 22, 2015

我正在使用Threading.Timer,例如:

new Timer(new TimerCallback(y=>
{
   try
   {
       Save(Read(DateTime.Now));
       // here i want to dispose this timer
   }
   catch
   {                          
   }
}),null,100000,10000);

如何在回調中處理此計時器。或解決方法?更新:讓我解釋一下情況。我想嘗試呼叫方法“Save”,而它會引發異常。如果它有效,我需要停止計時器。

試試這個:

Timer timer = null;
timer = new Timer(new TimerCallback(y =>
{    
   try    
   {
       Save(Read(DateTime.Now));        
       // here i want to dispose this timer
       timer.Dispose();    
   }    
   catch    
   {    
   }
}));
timer.Change(10000, 10000);

編輯:

我根據 Chuu 的建議稍微修改了上面的程式碼。請注意,如果 TimerCallback 被不同的定時器事件同時呼叫,Timer.Dispose最終可能會被呼叫多次。幸運的是,Timer它並不關心它是否被多次處理。

您需要將計時器的引用保存在變數中 -

public class MyClass
{
   private Timer _timer;

   public void StartTimer()
   {
       _timer =  new Timer(new TimerCallback(y=>{
                           try
                           {
                               Save(Read(DateTime.Now));
                               _timer.Dispose();
                           }
                           catch { 

                           }
                       }),null,100000,10000);
   }



}

注意:這是未經測試的程式碼。請檢查它是否有效並更新。

引用自:https://stackoverflow.com/questions/5230897