2009-03-14 2 views
0

미안 새내기 질문입니다.VB 서브 루틴을 다시 트리거하면 실행을 직렬화하는 방법은 무엇입니까?

저는 타이머에 의해 트리거되는 VB.NET 서브 루틴을 가지고 있습니다. 나는 때때로 루틴이 오랫동안 실행되면 루틴이 예상치 못한 결과로 계속 실행되는 동안 다시 트리거된다는 것을 발견했습니다. 이게 정상인가? 루틴의 각 복사본이 자체 스레드에서 실행됩니까? 루틴을 직렬화하는 방법이 있습니까? 지금은 부울을 사용하여 True로 설정하고 False로 설정하면 입력 할 때 루틴이 실행 중인지 확인할 수 있지만 좀 더 우아 할 수 있다고 생각합니다.

+0

System.Windows.Forms.Timer 또는 System.Timers.Timer입니까? –

답변

2

서브 루틴 실행을 시작할 때 타이머를 중지하고 종료 할 때 다시 시작하십시오.

예기치 않게 종료해도 타이머가 다시 시작되도록 오류 처리를 포함시켜야합니다.

1

System.Windows.Forms.Timer는 단일 스레드, 그래서 나는 당신이 이미 실행중인 동안 Tick 이벤트가 호출되는 거라고 놀랐 (정의, UI 스레드가 점유되어야하고, 전화를 걸 수없는)이야

나는

System.Timers.Timer

멀티 스레드입니다 ... Tick 이벤트가 대기하고 순차적으로 일어나는 볼 수, 당신이 설명하는 상황이있을 수 있습니다. (이 중 하나를 사용하는 경우 System.Windows.Forms.Timer으로 전환하면 이벤트가 서로 방해되지 않도록 유지됩니다.

관련 문제