2010-04-13 2 views
1

MSND에서 내 질문에 대한 답변을 찾을 수 없습니다. Timer 클래스는 Elapsed 이벤트에 가입 한 모든 처리기가 동일한 스레드 풀 스레드에서 실행되도록 보장합니까? 그렇다면 Elapsed 이벤트에 추가 된 순서대로 실행됩니까? 감사System.Timers.Timer 이벤트 처리기 스레딩 모드

답변

1

지금까지 내가 볼 수 있듯이, Elapsed 이벤트 핸들러는 모두 같은 스레드에 있는지 확인하는 유일한 방법은, 그래서 일반적으로 폼의 컨트롤 또는 무언가에 (타이머의 SynchronizingObject 속성을 설정하는 것입니다 Elapsed 이벤트는 UI 스레드에서 처리됩니다.) 그렇지 않으면 이벤트는 스레드 풀 스레드에서 처리됩니다. 즉, 매번 동일한 스레드 일 수 있지만 거의 확실하지는 않습니다.

참조 : http://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed.aspx

발사 이벤트 핸들러의 순서는 당신이 추가 된 순서대로 될 것 아마,하지만이 보장되지 않고 향후 변경 될 수 있습니다. 디자인이 특정 순서로 실행되는 이벤트에 의존하는 경우 디자인을 변경해야합니다.

+0

여기에서 대답을 찾은 것 같습니다. http://msdn.microsoft.com/en-us/library/awbftdfh.aspx 이벤트에 여러 구독자가있는 경우 이벤트 처리기가 동시에 호출됩니다. 이벤트가 발생했습니다. 핸들러는 단일 스레드 풀 스레드에서 차례로 실행됩니다. –

+0

@ user315454 : 그렇습니다. 이벤트가 발생할 때마다 모든 구독 처리기가 동일한 스레드에서 차례로 호출된다는 의미입니다. 그러나 다음에 이벤트가 발생하면 거의 이전과 다른 스레드로 진행됩니다. 이 시점에서 이것은 대부분 의미 론적 일 수 있지만, Timer 클래스는 모든 스레드가 동일한 스레드에서 호출된다는 것을 보증하지 않습니다.이 스레드는 이벤트에서 이벤트로 변경 될 수 있기 때문에 변경 될 수 있습니다. – MusiGenesis

+0

그러나 나는 그것에 대해 전혀 신경 쓰지 않는다고 생각합니다. :) 당신은 당신의 구체적인 문제에 대한 답을 찾은 것 같습니다. – MusiGenesis