代碼如下,在asp.net中 使用System.Timers.Timer設定定時器。在時間間隔在10分鐘以下時,定時器事件可以正常執行,OnElapsedEvent事件中的log輸出正常寫入,但是在間隔大于10分鐘的時候,OnElapsedEvent事件中的log輸出只會執行一次,甚至不執行。但是兩種情況下Start方法中的log均正常輸出。求大神指點。
public class TimerJob
{
ILog logger = LogManager.GetLogger("errorMsg");
string timerXmlUrl = AppDomain.CurrentDomain.BaseDirectory + "TimerSpace\\TimerConfig.xml";
public TimerJob()
{ }
public void Start()
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " TimerJob Start() 開始" + "\r\n");
try
{
Timer timer = timer = new Timer(1000 * 60 * 60 * 4);
timer.AutoReset = true;
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(OnElapsedEvent);
timer.Start();
}
catch (Exception e)
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " 定時器錯誤! ErrorMsg:" + e.Message + "\r\n");
}
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " TimerJob Start() 結束" + "\r\n");
}
/// <summary>
/// Timer的Elapsed事件執行的方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnElapsedEvent(Object sender, ElapsedEventArgs e)
{
logger.Error(DateTime.Now.ToString("yyyyMMdd HH:mm:ss") + " 定時器執行!");
}
}
uj5u.com熱心網友回復:
不會立即執行的,到了間隔時間會執行,看你那個間隔時間是4小時后執行,可以手動呼叫一次OnElapsedEvent。如下:
Timer timer = timer = new Timer(1000 * 60 * 60 * 4);
timer.AutoReset = true;
timer.Enabled = true;
timer.Elapsed += new ElapsedEventHandler(OnElapsedEvent);
timer.Start();
// 立即執行一次
OnElapsedEvent(null, null);
uj5u.com熱心網友回復:
Timer timer = timer = new Timer(1000 * 60 * 10)轉載請註明出處,本文鏈接:https://www.uj5u.com/net/100681.html
標籤:C#
