C#

2009-04-24 1 views
7

에서 5 분마다 10 분 동안 함수를 실행해야합니다.C#

타이머를 사용하여 5 초 동안 실행하지만 타이머를 10 분만 제한하려면 어떻게합니까?

당신에게

안드레아

답변

3

Timer.Stop() 후 120 틱이 대단히 감사합니다.

+0

음의 사랑을? :) –

2

시작 시간에주의하십시오. 각 호출에서 currentTime + 5 초> startTime + 10 분인지 테스트합니다. 그렇다면 타이머를 비활성화하십시오.

나는 타이머가 원하는 때에 발사된다는 보장이 없으므로이 방법을 N ticks로 실행하는 것이 더 좋습니다. 120 틱이 실제 시간의 10 분에 걸쳐 실행될 수 있습니다.

3

시작하기 전에 끝내야 할 시점을 추적하기 위해 DateTime 변수를 사용하기 만하면됩니다. Elapsed 이벤트 핸들러에서 신호 시간이 종료 시간보다 작은 지 확인하십시오. 그렇지 않으면 타이머를 중지하십시오.

3

함수가 호출되는 시간을 계산하고 타이머 틱에서 가입을 취소 한 경과 카운터를 생성 할 수 있습니다. 또는 틱주기가 10 분인 다른 타이머를 실행하고 타이머 틱에서 기능을 호출하지 않도록 체크하십시오.

6

Y 분을 X 간격으로 나누어 실행해야하는 횟수를 가져옵니다. 그 후에 함수가 호출 된 횟수를 세면됩니다.

귀하의 경우 10 분 = 600 초/5 초 = 120 회의 통화가 필요합니다. 함수를 호출 한 횟수를 카운터에서 추적하십시오.

9

이처럼 타이머 루프 뭔가 유무 :

DateTime endTime = DateTime.Now.AddMinutes(10); 

while(endTime < DateTime.Now) 
{ 
    // Process loop 
} 
+2

차라리 * 종료 시간 *을 저장하고 각 반복 전에 현재 시간 값과 비교할 것입니다. 그럼에도 불구하고, +1. – Cerebrus

+1

맞습니다. 종료 시간을 저장하는 것이 좋습니다. –

2

당신은 그냥 캡처 5 초와 10 분 동안 실행 다른 하나 실행이 타이머를 설정하고 첫 번째

12

을 해제 할 수 있습니다를 중지 할 시간을 지정하고 경과 된 처리기 내에서 타이머를 종료하십시오. 예를 들면 다음과 같습니다 (참고 : System.Threading.Timer 타이머를 사용했습니다.) Winforms로 작성하는 경우 System.Windows.Forms.Timer 뒤에있을 수 있습니다.

 

public class MyClass 
{ 
    System.Threading.Timer Timer; 
    System.DateTime StopTime; 
    public void Run() 
    { 
     StopTime = System.DateTime.Now.AddMinutes(10); 
     Timer = new System.Threading.Timer(TimerCallback, null, 0, 5000); 
    } 

    private void TimerCallback(object state) 
    { 
     if(System.DateTime.Now >= StopTime) 
     { 
      Timer.Dispose(); 
      return; 
     } 
     // do your work..... 
    } 
} 
 
2

당신은 초 타이머를 사용할 수 있습니다 간단한 답변

class Program 
{ 
    static void Main(string[] args) 
    { 
     int interval = 5 * 1000; //milliseconds 
     int duration = 10 * 60 * 1000; //milliseconds 

     intervalTimer = new System.Timers.Timer(interval); 
     durationTimer = new System.Timers.Timer(duration); 

     intervalTimer.Elapsed += new System.Timers.ElapsedEventHandler(intervalTimer_Elapsed); 
     durationTimer.Elapsed += new System.Timers.ElapsedEventHandler(durationTimer_Elapsed); 

     intervalTimer.Start(); 
     durationTimer.Start(); 
    } 

    static void durationTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     intervalTimer.Stop(); 
     durationTimer.Stop(); 
    } 

    static void intervalTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     //call your method 
    } 

    private static System.Timers.Timer intervalTimer; 
    private static System.Timers.Timer durationTimer; 
}