2012-12-04 4 views
3

나는 설정 DispatchTimer가 제대로 DispatcherTimer가 임의의 시간 후에 왜 멈추는 지 이유가 무엇입니까?

OneSecondChecker = new DispatcherTimer(); 
OneSecondChecker.Tick += new EventHandler(OneSecondChecker_Tick); 
OneSecondChecker.Interval = new TimeSpan(0, 0, 1);     
OneSecondChecker.Start(); 

문제마다 2 ~

화재가 :를 그리고 그것은 그냥 발사 중지 후 일정 시간 동안 올바르게 발생합니다.

추가 정보 : 이제 어떻게 할 수 있습니까? OneSecondChecker_Tick() 메서드가 실행 중일 경우 true로 설정되고, 그렇지 않으면 false로 설정되어 클래스에서 실행되는이 메서드의 인스턴스가 두 개 없도록 클래스 수준 (정적) 부울 변수가 있습니다. 매초마다 발사하도록 설정된 경우에도 같은 시간. OneSecondChecker_Tick()이 지연없이 실행되는지 확인하는 것은 응용 프로그램 요구 사항입니다. 나는 또한 무한 루프에서 실행하려고하지 않습니다. OneSecondChecker_Tick()이 실행되기 전에 테이블 값이 업데이트되는지 확인하는 두 번째 검사가 있습니다. OneSecondChecker_Tick()에 "sort of"이 실행되도록 알리는 테이블 값입니다. 이 테이블 값은 다른 응용 프로그램에 의해 업데이트됩니다.

메서드 자체 내에서 TPL을 사용하여 병렬로 스레드를 실행하는 호출이 있습니다. 그것이 그 일과 관련이 있는지 나는 모른다.

편집 아직이 것을 파악할 수 없었습니다. 응용 프로그램이 고정되어있을 수 있습니다. 하지만 작업 관리자는 그렇게 말하지 않습니다. 응용 프로그램이 작업 관리자가 아닌 다른 곳에서 응답하지 않는지 여부를 알 수 있습니까?

+0

예외가 OneSecondChecker_Tick 어딘가에서 발생하는지 확인하십시오. – thumbmunkeys

+0

타이머가 가비지 수집 될 수 있습니까? – svick

+0

null로 설정하는 코드가 없습니다. – Mukus

답변

1

DispatchTimer에는 문제가 없습니다. 그것은 TPL조차도 아니었다. 문제는 코드에서 무한 루프로 실행되어 스택 오버플로가 발생하여 발사가 중단되었습니다.