2014-12-05 62 views
0

我想每5分鐘運行一次函數,由於某種原因計時器不會等待,所有事情都會立即發生。 這是代碼。c#計時器不會等待

class Program 
{ 
    static void Main(string[] args) 
    { 
     setTimer(); 
     Console.Read(); 
    } 

    public static void callProcedure(object state) 
    { 
     //dosomething.. 

     setTimer(); 
    } 

    private static void setTimer() 
    { 
     System.Threading.Timer timer = new System.Threading.Timer(callProcedure, null, TimeSpan.Zero, TimeSpan.FromMinutes(5)); 
    } 
} 

}

+0

http://msdn.microsoft.com/en-us/library/2x96zfy7(v=vs.110).aspx應回答你的問題,尤其是「備註」部分。 – 2014-12-05 05:53:56

回答

0

我看到一個無限循環。創建計時器時,它會在TimeSpan.Zero處執行callProcedure,然後每5分鐘再執行一次,這是構造函數的最後一個參數。

所以,當你創建計時器時,它會自動執行該函數,它將再次創建完全相同的計時器,它立即運行callProcedure,等等。它永遠不會結束。

只需交換最後2個參數,使其每5分鐘只運行一次,即可重置計時器以在另一個5分鐘內再次運行。

System.Threading.Timer timer = new System.Threading.Timer(
    callProcedure, null, TimeSpan.FromMinutes(5), TimeSpan.Zero);