위의 수정된 코드를 살펴보세요.
-
System.Windows.Forms.Timer
는 정확한 인터벌로 이벤트가 호출되지 않습니다. 이유는 타이머가 UI 스레드의 메시지 루프를 통해 발생하기 때문입니다. -
System.Windows.Forms.Timer
는 이벤트 호출 메소드의 처리 시간을 고려하지 않습니다. 인터벌이 100ms이고 이벤트 콜 된 메소드의 처리시간이 100ms이라면 총 200ms이 걸립니다.
위의 1, 2의 이유 때문에 시간이 계속 밀리게 됩니다.
위의 문제를 해결하려면 PeriodicTimer를 사용하거나 제가 고친 것 처럼 Stopwatch
(또는 타이머 시작 시각을 DateTime.Now 로 기록 후 변화되는 시간을 표시)를 이용할 수 있습니다.