아래에 정의 된대로 타이머가 있습니다. 타이머는 장기 실행 작업을 실행합니다. 내가 가진 문제는 타이머가 다시 실행되고 다른 타이머 실행이 시작될 때 (예 : _timer_Elapsed
)입니다. 타이머가 끝난 후 한 간격을 실행하도록 타이머를 가져올 수 있습니까? 지금은 여러 가지 타이머 실행이 동시에 일어날 수 있고 그로 인해 모든 코드 문제가 발생합니다.다중 타이머 경과 문제
protected override void OnStart(string[] args)
{
_timer = new System.Timers.Timer();
_timer.AutoReset = false;
_timer.Interval = (Convert.ToInt32(ConfigurationManager.AppSettings["CheckInterval"]));
_timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
_timer.Enabled = true;
_timer.Start(); // Start timer
}
public static void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
try
{
_timer.Interval = (Convert.ToInt32(ConfigurationManager.AppSettings["CheckInterval"]));
BLLGenericResult SystemCheckItems_Result = ServiceItemOperations.CheckItems(); // Long Running Task
}
catch (Exception ex)
{
// Exception handling...
}
finally
{
_timer.Start();
}
}
AutoReset = false를 사용하면 명시 적으로 다시 활성화하지 않으면 타이머가 다시 작동하지 않습니다. Elapsed 이벤트 핸들러가 끝나는 대신 Elapsed 이벤트 핸들러를 다시 활성화하는 것과 같이 잘못된 방법으로 잘 수행 할 수 있습니다. 또는 OnStop() 메서드를 제대로 구현하지 않습니다. –
@HansPassant 예 - 나는 또한 그걸 읽었습니다. _Timer_Elapsed 메서드를 구현하고 생각하는 것을 보도록하겠습니다. – user1438082
... 또는 OnStart 함수를 다시 호출하고 이전 타이머를 실행하는 새 타이머가 시작되었습니다 . –