차이가 무엇인가 between System.Windows.Forms.Timer()
와는 System.Windows.Threading.DispatcherTimer()
? 어떤 경우에 사용해야합니까? 모범 사례가 있습니까?
답변
Windows.Forms.Timer
Windows Forms 메시지 루프를 사용하여 타이머 이벤트를 처리합니다. Windows Forms 응용 프로그램에서 사용되는 타이밍 이벤트를 작성할 때 사용해야하며 기본 UI 스레드에서 타이머를 실행하려고합니다.
DispatcherTimer
WPF 타이밍 메커니즘입니다. 유사한 방식으로 타이밍을 처리하고 싶을 때 (단일 스레드로 제한되지는 않지만-각 스레드에는 자체 디스패처가 있음) 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의 경우 긴 메 토스가 다른 스레드에서 실행되기 때문에 그렇지 않습니다.