2014-09-28 2 views
0

나는 우리 서버에 다시 내 애플 리케이션의 로컬 데이터를 동기화하기 위해 매 10 초마다 실행 Timer있다.타이머 - 이전에 완료 될 때까지 재실행하지 마라.

public Timer syncTimer; 
syncTimer = new Timer((o) => 
    { 
     this.syncToServer(); 

    }, null, 0, 10000); 

내 syncToServer가 실행하는 데 10 초 이상 걸리면 문제가 발생합니다.

public Timer syncTimer; 
syncTimer = new Timer((o) => 
    { 
     syncTimer.Change(Timeout.Infinite , Timeout.Infinite); //Stop the timer 
     this.syncToServer(); 
     syncTimer.Change(10000 , 10000); //Restart the timer 
    }, null, 0, 10000); 

이 난 후 오전 또는이에서 실행 중지 할 수있는 더 좋은 방법이 무엇을 달성하는 가장 좋은 방법입니다 : 나는 그것을 실행하는 동안 타이머를 일시 정지 한 후 완료되면 다시 시작하려면 다음을 수행 고려하고 같은 시간?

+0

부울 플래그 설정은 어떻습니까? 실행중인 경우 (즉,'boolean'이 true 인 경우 하나의 실행을 건너 뛰고 10 초 만에 다음 실행을 기다리는 것입니까? – Herdo

+0

이것은 http://stackoverflow.com/questions/1699543/stopping-timer- in-its-its-callback-method? rq = 1 –

+0

이 블록에 대해 –

답변

1

아마도 System.Timers.Timer를 사용할 수 있습니다. System.Threading.Timer보다 이해하기가 쉽습니다.

var timer = new System.Timers.Timer(1000); 
timer.AutoReset = false; 
timer.Elapsed += (sender, e) => { 
    this.syncToServer(); 
    // maybe Thread.Sleep(100000); 
    timer.Start(); 
}; 
timer.Start(); 

도움이 될 수 있습니다.

+0

을 사용하십시오.이 답변에 대한 좋은 점은 작업이 수행 된 후에 만 ​​타이머가 다시 시작되므로 재진입이 불가능하다는 것입니다 이 계획과. – GameAlchemist

관련 문제