2012-08-12 2 views
1

주어진 작업으로 새 타이머를 만드는 방법이 있습니까? 처음부터 1 시간 후에 자체를 죽여야한다고 알리는 방법이 있습니까? (자체적으로 해결할 수 있습니까, 아니면 그것을 처리 할 다른 라인이 필요합니까?)응용 프로그램의 수명의 처음 1 시간 동안 만 타이머가 필요합니다.

+3

이 WinForms입니까? WPF? 다른 것? 어떤 타이머를 사용하고 있습니까? 코드를 게시 할 수 있습니까? –

+0

두 개의 성능 카운터가 있습니다. 하나는 매 초마다 업데이트되지만 다른 하나는 매시간 업데이트됩니다. 첫 번째 시간에 카운터의 일부가 0 인 것을 보는 것이 깔끔한 것은 아닙니다. 순수한 C# 4.0 질문으로 생각해보십시오. 어떻게하면 작업을 타이머로 설정하고 한 시간 후에 멈출 수 있습니까? 나는 그걸 직접 관리하기 시작하고 싶지 않다 ... – user1025852

답변

1

저는 두 개의 타이머를 사용합니다. 하나는 원하는 것을하고 다른 하나는 1 시간 후에 첫 번째 타이머를 종료하는 것입니다.

다음은 두 가지 예이며, 각각 1 초 기본 타이머를 사용하여 5 초에 종료해야합니다.

System.Threading.Timer를 사용하는 경우 :

Timer actualTimer = new Timer(obj => Console.WriteLine("Timer!"), 
    null, 0, 1000); 

Timer killingTimer = new Timer(obj => 
{ 
    Console.WriteLine("Killing timer!"); 
    // Set the dueTime and timeout to infinite, to stop the timer. 
    actualTimer.Change(Timeout.Infinite, Timeout.Infinite); 
    killingTimer.Change(Timeout.Infinite, Timeout.Infinite); 
}, null, 5000, 5000); 

Console.ReadLine(); 

당신이 System.Timers.Timer를 사용하는 경우 : 밀리 초

Timer actualTimer = new Timer(); 
actualTimer.Interval = 1000; 
actualTimer.Elapsed += (sender, e) => Console.WriteLine("Timer!"); 
actualTimer.Start(); 

Timer killingTimer = new Timer(); 
killingTimer.Interval = 5000; 
killingTimer.Elapsed += (sender, e) => 
{ 
    Console.WriteLine("Killing timer!"); 
    actualTimer.Stop(); 
    killingTimer.Stop(); 
}; 
killingTimer.Start(); 

모든 시간은 (1000 초에서). System.Threading.Timerthis post에 따라 선호되지만 System.Timers.Timerthis post에 따라 타이머의 메서드가 다른 스레드에서 호출 될 수있는 상황입니다.

+0

당신은 또한 살인 타이머를 죽이고 싶다! – usr

+0

감사합니다. Virtlink와 usr. 그것은 작동하고 그것은 깔끔한 솔루션 (나는 그것이 생성자에 있었으면 좋겠지 만 이것도 좋다) – user1025852

+0

또 다른 질문 - 동기화 문제가 있어야합니까? 예를 들어 죽이는 타이머는 몇 가지 중요한 섹션에서 실제 타이머를 죽이고 예외가 발생합니까? – user1025852

관련 문제