정밀도 - c# timer 초기화




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

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

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


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

Reset ()이라는 확장 메서드를 작성할 수 있습니다.

  • Timers.Timer 및 Forms.Timer에 대해 Stop () - Start ()를 호출합니다.
  • Threading.Timer에 대한 변경 호출

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

int tmrCtr = 0;
Timer mTimer;

private void ResetTimer()
{
  tmrCtr = 0;
}

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

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

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


나는 이것을한다

//Restart the timer
queueTimer.Enabled = true;

모든 타이머에는 System.Threading.Timer를 제외하고 Start () 및 Stop () 메서드에 해당하는 타이머가 있습니다.

그래서 확장 메소드 같은 ...

public static void Reset(this Timer timer)
{
  timer.Stop();
  timer.Start();
}

... 그것에 대해 갈 방법 중 하나입니다.


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

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
    }

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





timer