2013-07-21 2 views
1

특정 간격으로 특정 코드를 실행할 수있는 타이머를 사용하려고하지만 Winforms 타이머가 매우 부정확합니다. 2 초로 설정했지만 48 초가 지나면 작동하지 않습니다. 내가 실행하고있는 코드의 종류는 가능한 한 빨리 행동하는 데 크게 의존하므로 48 초가 너무 늦어서 아무 것도 할 수 없습니다..NET에서 가장 정확한 타이머는 무엇입니까?

또한 나는 실행중인 코드가 매우 간단하기 때문에 타이머가 많은 CPU 사이클을 먹는 것을 원하지 않습니다.

+0

어, 너무 늦게 * 46 초가 지나면 * UI 스레드를 잘못 차단하는 것과 같은 것으로 의심됩니다. WinForms 타이머는 생성 된 해당 UI 스레드에서 전달됩니다 (일반적으로 "기본"창당 하나씩 있음). 블로킹 스레드 주변에서 * 발사하기를 원하면 다른 스레드를 도입하거나 다른 스레드를 사용하는 타이머를 사용해야합니다 (차단되지 않음). – user2246674

+0

감사합니다. 기본적으로 Monitor 메서드를 호출하는 BackgroundWorker를 사용하고 있습니다. 타이머가 RunWorkerAsync를 호출 중입니다. 이거 나쁜거야? –

+0

BGW.RunWorkerAsync *는 차단하면 안됩니다. 타이머 콜백에 BGW가 완료 될 때까지 대기하는 것과 같은 차단 코드가 있습니까? – user2246674

답변

2

System.Timer Class을 사용하십시오. 멀티 스레드 환경을 위해 설계되었으므로 타이머 제어보다 정확합니다.

2

this도 확인하십시오. 또한 MSDN도 정말 깊고 완벽합니다.

덧붙여서 가장 정확한 타이머는 Code Execution 번과 다른 비슷한 것들을 계산하는 데 사용되며 Visual Studio에서 코드의 성능을 계산하는 데 사용되므로 정확한 정확성을 보장합니다. 그러나 귀하의 경우에는 그것을 사용할 수 없습니다. 귀하의 정보와 앞으로이 게시물을 볼 수있는 다른 사람들을 위해 StopWatch을 언급했습니다.

+1

감사합니다. 스톱워치에는 틱 이벤트가 없습니다. –

관련 문제