[c#] C #에서 타이머를 재설정하는 방법은 무엇입니까?

세 가지가 있습니다 Timer클래스가 내가 알고 오전, System.Threading.Timer, System.Timers.Timer,와 System.Windows.Forms.Timer,이 중에는 없다 .Reset()0으로 현재의 경과 시간을 재설정 할 기능을.

이 기능이있는 BCL 클래스가 있습니까? 해킹이 아닌 방법이 있습니까? (시간 제한을 변경하면 재설정 될 수 있다고 생각했습니다.) Timer이 기능이 있는 클래스 를 다시 구현하는 것이 얼마나 어려울 지 또는 BCL 클래스 중 하나를 사용하여 안정적으로 수행하는 방법에 대해 생각하십니까?



답변

나는 항상한다 …

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

… 그게 해킹인가요? 🙂

Threading.Timer에 대한 의견에 따라 Change 메서드입니다

dueTime 유형 : System.Int32Timer가 생성 될 때 지정된 콜백 메서드를 호출하기 전에 지연되는 시간 (밀리 초)입니다. Timeout.Infinite타이머가 다시 시작되지 않도록 지정
합니다. 타이머를 즉시 다시 시작하려면 영 (0)을 지정하십시오.


답변

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

따라서 다음과 같은 확장 방법 …

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

…이 문제를 해결하는 한 가지 방법입니다.


답변

의 경우 System.Timers.TimerMSDN 설명서에 따르면 http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :

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

그래서,

    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에 대한 Change 호출

답변

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

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
    }


답변

다른 주석이 잘못 되었기 때문에 명확성을 위해 System.TimersEnabled를 true 설정하면 경과 시간 재설정됩니다. 방금 아래에서 동작을 테스트했습니다.

Timer countDown= new Timer(3000);

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 을 호출하는 private UpdateTimer()메서드를 호출한다는 것을 .NET 참조 소스 에서 볼 수 Change()있습니다.


답변

타이머 (System.Windows.Forms.Timer)의 경우.

.Stop, .Start 메서드는 재설정으로 작동했습니다.