특정 - c# 타이머 예제




콘솔 애플리케이션에서 신뢰할 수있는 타이머 (2)

처리 종료시 기본 스레드를 차단하기 위해 ManualResetEvent 를 사용하고 타이머 처리가 완료되면 Reset() 을 호출하십시오. 이것이 지속적으로 실행되어야하는 것이면 콘솔 앱 대신 서비스 프로세스로 옮기는 것을 고려하십시오.

.NET 에는 세 가지 타이머 유형이 있음을 알고 있습니다 ( .NET Framework 클래스 라이브러리에서 타이머 클래스 비교 참조). 메인 스레드가 사용 중이면 다른 유형이 표류 할 수 있으므로 스레드 타이머를 선택했으며 신뢰할 수 있어야합니다.

타이머를 제어 할 때이 타이머가 작동하는 방식은 다른 스레드에 배치되므로 사용 중이 아닐 때 항상 상위 스레드에서 완료된 작업과 함께 틱할 수 있습니다.

콘솔 응용 프로그램 에서이 타이머의 문제는 다른 스레드에서 타이머가 작동하는 동안 기본 스레드가 응용 프로그램에 아무런 작업을 수행하지 않는다는 것입니다.

while true 루프를 추가하려고 시도했지만 타이머가 꺼지면 주 스레드가 너무 바쁩니다.


Console.ReadLine() 과 같은 것을 사용하여 기본 스레드를 차단할 수 있으므로 다른 스레드 (예 : 타이머 스레드)는 계속 작동합니다. AutoResetEvent 를 사용하여 실행을 차단 한 다음 (필요한 경우) 해당 AutoResetEvent 객체에서 Set () 메서드를 호출하여 주 스레드를 해제 할 수 있습니다. 또한 Timer 객체에 대한 참조가 범위를 벗어나지 않고 가비지 수집되지 않았는지 확인하십시오.





timer