System.Timers.Timer를 사용하여 다음 시나리오를 가지고 있습니다. System.Timers.Timer 메서드 내에서 스레드
는 Timer 객체를 생성하고 JobListener_Elapsed 내에서 방법을_JobListener.Enabled = false;
_JobListener.Elapsed += (this.JobListener_Elapsed);
을 할당, 나는 몇 가지 기능을 실행하는 다른 스레드를 만들었습니다.
JobListener_Elapsed
{
//stop the timer
_JobListener.Enabled = false;
System.Threading.Thread pollThread = new Thread(JobListener_ElapsedAsync);
pollThread.Start();
//join to the main timer thread
pollThread.Join();
//restart the timer
_JobListener.Enabled = true;
}
나는 타이머 활성화 상태를 기록합니다.
private void JobListener_ElapsedAsync()
{
try{
log Timer.Enabled
some other code
}finally
{
_JobListener.Enabled = true;
}
}
그러나 나는 몇 시간을 볼 수 있는데, 타이머 상태가 참임을 알 수 있습니다. JobListener_ElapsedAsync가 실행 중일 때 타이머를 중지해야합니다.
아이디어가 있으십니까?
시작하는 스레드가 완료 될 때까지 차단을 시작하면 새 스레드를 시작할 시점이 무엇입니까? 만약 당신이 그것을하고 있다면 이벤트 처리기에서 코드를 직접 실행할 수도 있습니다. – Servy
@Servy 나는 같은 질문을 나 자신에게 요구하고 있었다. 레거시 코드입니다. 별도의 스레드를 사용하지 않도록 수정했습니다. 그러나 Timer 메서드 안에이 별도의 스레드를 유지할 때이 동작에 혼란스러워합니다. – Helic
코드에서 타이머를 활성화하는 위치는 어디입니까? * 어딘가에 * 활성화해야합니다. 이 코드가 실행되는 동안 아마도 호출되고있을 것입니다. 당신은 또한 여러 개의 경과 된 처리기를 가질 수 있습니다, 당신은 단지 이것을 잘못 관찰 할 수 있습니다. 비동기 메서드가 다른 * 비동기식 연산을 시작할 수 있습니다. 따라서 현재 스레드가 타이머를 사용 가능하게합니다. 문제가 무엇인지 알 수있는 충분한 코드를 보여주었습니다. – Servy