C#에서 타이머를 재설정하는 방법?




c# timer 초기화 (8)

나는 이것을한다

//Restart the timer
queueTimer.Enabled = true;

세 가지 Timer 클래스 ( System.Threading.Timer , System.Timers.TimerSystem.Windows.Forms.Timer 는 알고 있지만 현재 경과 시간을 다시 설정하는 .Reset() 함수는 없습니다. 0으로 설정합니다.

이 기능을 가진 BCL 클래스가 있습니까? 그것을 해킹하지 않는 방법이 있습니까? (아마 그것의 시간 제한을 변경하는 것은 그것을 재설정 수도) 생각이 기능을 가진 Timer 클래스를 다시 구현하는 것이 얼마나 힘든 생각, 또는 안정적으로 BCL 클래스 중 하나와 함께 할 방법?


Timer (System.Windows.Forms.Timer)의 경우.

.Stop, then .Start 메소드는 리셋으로 작동했습니다.


할 수 있습니다. timer.Interval = timer.Interval


MSDN 설명서에 따라 System.Timers.Timer 경우 http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :

Timer가 시작된 후 간격이 설정되면 카운트가 재설정됩니다. 예를 들어 간격을 5 초로 설정하고 Enabled 속성을 true로 설정하면 Enabled가 설정된 시간에 카운트가 시작됩니다. count가 3 초인 간격을 10 초로 재설정하면 Enabled가 true로 설정된 후 Elapsed 이벤트가 처음 13 초 동안 발생합니다.

그래서,

    const double TIMEOUT = 5000; // milliseconds

    aTimer = new System.Timers.Timer(TIMEOUT);
    aTimer.Start();     // timer start running

    :
    :

    aTimer.Interval = TIMEOUT;  // restart the timer

일부 다른 설명이 정확하지 않으므로 System.Timers 사용할 때 Enabled를 true 설정하면 경과 시간 재설정됩니다. 방금 아래에서 동작을 테스트했습니다.

Timer countDown= new Timer();

Main()
{
    TextBox.TextDidChange += TextBox_TextDidChange;
    countdown.Elapsed += CountDown_Elapsed;
}

void TextBox_TextDidChange(Object sender, EventArgs e)
{
    countdown.Enabled = true;
}

void CountDown_Elapsed(object sender, EventArgs e)
{
    System.Console.WriteLine("Elapsed");
}

텍스트 상자에 텍스트를 반복적으로 입력하고 타이머는 마지막 키 입력 후 3 초만 실행됩니다. 'Timers.Start ()'를 호출하면 Enabled가 true로 설정됩니다.

그리고 처음부터 곧바로 가야만했던 것을 .NET 참조 소스 에서 볼 수 있습니다. 이미 Enabled 타이머를 활성화하면 Change () 메서드를 내부적으로 호출하는 개인 UpdateTimer () 메서드를 호출합니다. .


방금 타이머에 새 값을 할당했습니다.

mytimer.Change(10000, 0); // reset to 10 seconds

그것은 나를 위해 잘 작동합니다.

코드의 맨 위에서 타이머를 정의합니다. System.Threading.Timer myTimer;

if (!active)
        {
            myTimer= new System.Threading.Timer(new TimerCallback(TimerProc));
        }
        myTimer.Change(10000, 0);
        active = true;

private void TimerProc(object state)
    {
        // The state object is the Timer object.
        System.Threading.Timer t = (System.Threading.Timer)state;
        t.Dispose();
        Console.WriteLine("The timer callback executes.");
        active = false;
        //action to do when timer is back to zero
    }

나는 항상한다 ...

myTimer.Stop();
myTimer.Start();

... 해킹인가요? :)

주석 당 Threading.Timer에서 변경 방법입니다 ...

dueTime 형식 : System.Int32 Timer를 구성 할 때 지정된 콜백 메서드를 호출하기 전에 지연 될 시간 (밀리 초 단위)입니다. 타이머가 다시 시작되지 않도록하려면 Timeout.Infinite 를 지정하십시오. 타이머를 즉시 재시작하려면 0을 지정하십시오.


windows.timer를 재설정하는 다른 방법은 다음과 같이 카운터를 사용하는 것입니다.

int tmrCtr = 0;
Timer mTimer;

private void ResetTimer()
{
  tmrCtr = 0;
}

private void mTimer_Tick()
{
  tmrCtr++;
  //perform task
}  

따라서 1 초마다 반복하려는 경우 타이머 간격을 100ms로 설정하고 카운터를 10 사이클로 테스트 할 수 있습니다.

타이머가 다른 프로세스에서 대기해야하는 경우에 적합합니다. 다른 프로세스에서 타이머가 종료 될 수 있습니다.





timer