2009-11-29 78 views
0

我從global.asax調用一個threading.timer,它調用許多方法,每個方法都從不同的服務獲取數據並將其寫入文件。 我的問題是我如何讓方法被定期調用讓我們說5分鐘?Threading.Timer異步調用很多方法

我要做的就是: 在Global.asax中,我宣佈一個計時器

protected void Application_Start() 
{ 
    TimerCallback timerDelegate = new TimerCallback(myMainMethod); 
    Timer mytimer = new Timer(timerDelegate, null, 0, 300000); 
    Application.Add("timer", mytimer); 
} 

myMainMethod的聲明如下所示:

public static void myMainMethod(object obj) 
{ 
    MyDelegateType d1 = new MyDelegateType(getandwriteServiceData1); 
    d1.BeginInvoke(null, null); 
    MyDelegateType d2 = new MyDelegateType(getandwriteServiceData2); 
    d2.BeginInvoke(null, null); 
} 

這種方式工作得很好,但它調用myMainMethod每5分鐘。我需要的是在所有數據被重新分區並寫入服務器上的文件5分鐘後調用該方法。

我該怎麼做?

回答

0

您應該在「myMainMethod」, 結束之前重新創建一個計時器,並禁用/刪除前一個計時器。我不知道關於C3語法

喜歡的東西:

protected void Application_Start() 
{ 
    TimerCallback timerDelegate = new TimerCallback(myMainMethod); 
    Timer mytimer = new Timer(timerDelegate, null, 0, 300000); 
    Application.Add("timer", mytimer); 
} 


public static void myMainMethod(object obj) 
{ 
    MyDelegateType d1 = new MyDelegateType(getandwriteServiceData1); 
    d1.BeginInvoke(null, null); 
    MyDelegateType d2 = new MyDelegateType(getandwriteServiceData2); 
    d2.BeginInvoke(null, null); 
    // find a way to pass mytimer as an argument of the myMainMethod 
    // or use a global variable 
    Application.Remove("timer", mytimer); 
    Application.Add("timer", mytimer); 
}