[c#] Timer와 DispatcherTimer 비교

차이가 무엇인가 between System.Windows.Forms.Timer()와는 System.Windows.Threading.DispatcherTimer()? 어떤 경우에 사용해야합니까? 모범 사례가 있습니까?



답변

Windows.Forms.TimerWindows Forms 메시지 루프를 사용하여 타이머 이벤트를 처리합니다. Windows Forms 응용 프로그램에서 사용되는 타이밍 이벤트를 작성할 때 사용해야하며 기본 UI 스레드에서 타이머를 실행하려고합니다.

DispatcherTimerWPF 타이밍 메커니즘입니다. 유사한 방식으로 타이밍을 처리하고 싶을 때 (단일 스레드로 제한되지는 않지만-각 스레드에는 자체 디스패처가 있음) WPF를 사용하는 경우에 사용해야합니다. Dispatcher와 동일한 스레드에서 이벤트를 발생시킵니다.

일반적으로, WPF == DispatcherTimer그리고 Windows Forms == Forms.Timer.

즉 , 별도의 스레드에서 실행 System.Threading.Timer되는 타이머 class인도 있습니다. 이것은 UI 업데이트를 시도하지 않는 순전히 수치 타이밍에 좋습니다.


답변

여기에 작은 예제가있는 타이머에 대한 좋은 기사를 찾았습니다.
http://www.progware.org/Blog/post/Timers-in-WPF.aspx

결론적으로 :

DoSomething ()이 GUI 구성 요소를 조작하는 경우 Timer를 사용하여 다음을 사용해야합니다. this.Dispatcher.Invoke ((Action) delegate {// GUI RELATED CODE HERE} 다른 스레드에서 직접 GUI 컨트롤에 액세스 할 수 없기 때문입니다. DispatcherTimer를 사용하면 수행 할 수 있습니다. 그렇게 할 필요가 없습니다.

DoSomething ()이 시간이 많이 걸리는 작업을 수행하면 DispatcherTimer의 경우 GUI가 중지됩니다. Timer의 경우 긴 메 토스가 다른 스레드에서 실행되기 때문에 그렇지 않습니다.


답변