2013-01-14 3 views
2

각 시간 간격으로 작업을 예약하기 위해 타이머가있는 Windows 서비스로 작업하고 있습니다. 타이머 경과 이벤트가 두 번 이상 발생하는 것으로 보입니다. 여기System.Timers.Timer 경과 된 이벤트가 Windows 서비스에서 두 번 이상 발생했습니다.

코드 샘플 :

private static System.Timers.Timer _timer = new System.Timers.Timer(); 

protected override void OnStart(string[] args) 
{ 
     _timer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent); 
     _timer.Interval = 1000; 
     _timer.Enabled = true; 
     _timer.Start(); 
} 

private void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e) 
{ 
     _timer.Enabled = false; 
     _timer.Stop(); 

     //Do the job 

     _timer.Enabled = true; 
     _timer.Start(); 
} 

당신이 날 도와 드릴까요? 는

+0

MSDN에서 시작 : - 시작() - Enabled를 true로 설정하여 Elapsed 이벤트 *를 시작합니다. * ' – Blachshma

+0

코드에 버그가 있습니다. 서비스를 두 번 이상 시작하면 다른 이벤트 핸들러가 추가됩니다. –

답변

0

경과 이벤트를 발생시킬 수있는 신호는 항상 스레드 풀 스레드에서 실행 을 위해 대기 주셔서 감사합니다, 그래서 이벤트 처리 방법은 동시에 하나 개의 스레드에서 실행할 수있는 그 Stop 메소드를 호출 다른 스레드에서 실행됩니다. 이로 인해 Stop 메서드가 호출 된 후 Elapsed 이벤트가 발생할 수 있습니다. 다음 섹션의 코드 예에서는이 경쟁 조건을 해결하기 위해 방법을 보여줍니다.

인용구 : Timer.Stop Method. 이 페이지의 코드 샘플을 참조하십시오.

+0

고마워, 이해했다. Timer.AutoReset 속성을 false로 설정하고 Timer.Stop()을 제거하고 이제는 정상적으로 작동합니다. –

관련 문제