2017-11-17 2 views
0

Ich verwende derzeit einen einzigen Timer. Dieser Timer ist so eingestellt, dass er alle zwei Sekunden zum nächsten Fall im Case-Schalter wechselt. Allerdings möchte ich jetzt den Timer auf eine andere Anzahl von Sekunden einstellen können. Ich hätte gerne drei oder vier verschiedene Werte. Ich weiß, dass ich neue Timer erstellen kann und dann den Event-Handler für jeden einzelnen bekomme, aber ich möchte das hier nicht machen. Gibt es eine Möglichkeit, einen einzelnen Timer auf unterschiedliche Werte zu setzen? Der Code, den ich zur Zeit haben, ist im Folgenden aufgeführt:Einstellen eines Timers mit anderen Werten

Clock = new Timer(2000); 
      Clock.Elapsed += Clock_Elapsed; 
      Clock.Enabled = true; 
      Clock.Start(); 

private void Clock_Elapsed(object sender, ElapsedEventArgs e) 
     { 
      switch (CurrentDevice) 
      { 
       case (Devices.WSS): 
        if (OurWSS.CurrentComponent != null) 
        { 
         OurRobot.LoadComponent(OurComponent); 
         OurWSS.UnLoad();      
        } 
        CurrentDevice = Devices.Robot 
        break; 
       case (Devices.Robot): 
        if (OurRobot.CurrentComponent != null) 
        { 
         OurMachine.LoadComponent(OurComponent); 
         OurRobot.UnLoad(); 
        } 
        CurrentDevice = Devices.Machine; 
        break; 
       case (Devices.Machine): 
        if (OurMachine.CurrentComponent != null) 
        { 
         OurRobot.LoadComponent(OurComponent); 
         //OurComponent.GetCurrentOperation(); 
         OurMachine.UnLoad(); 
        } 
        CurrentDevice = Devices.RobotOut; 
        break; 
       case (Devices.RobotOut): 
        if (OurRobot.CurrentComponent != null) 
        { 
         OurWSS.LoadComponent(OurComponent); 
         OurRobot.UnLoad(); 
        } 
        CurrentDevice = Devices.WSS; 
        break; 
      } 
     } 
+0

Ein Timer pro Intervall benötigt wird, I‘ Ich habe Angst. – DavidG

Antwort

0

Sie können nicht einen einzigen Timer mehrere Intervalle zurück, aber wenn die Intervalle Sie ein Vielfaches von einigen einzelnen Wert wollen, sind es wäre leicht genug sein, um die Zecken, bis die ignorieren gewünschtes Intervall tritt auf.

Es gibt viele Möglichkeiten, dies zu tun. Hier ist ein Beispiel, das ich in der Unity-Spieleprogrammierung verwendet habe: Stellen Sie sich vor, Sie möchten in Intervallen von 1 Sekunde, 5 Sekunden und 10 Sekunden antworten. Initialisieren Sie zunächst ein Array mit drei Steckplätzen, das die aktuelle Uhrzeit plus 1, 5 und 10 Sekunden enthält, und stellen Sie den Timer auf 1-Sekunden-Intervalle ein. Prüfen Sie bei jedem Timer-Tick-Test, ob die aktuelle Zeit gleich oder größer als jeder Slot ist, und führen Sie die entsprechende Aktion aus und aktualisieren Sie den Array-Slot auf die nächste Zielzeit für das Intervall dieses Slots.

Die aktualisierte Zielzeit könnte relativ zur tatsächlichen aktuellen Zeit oder relativ zu der im Slot gespeicherten Zeit sein, je nachdem, ob es wichtiger ist, festen oder relativen Intervallen so nahe wie möglich zu kommen.

Dies ist auch leicht in eine Klasse abstrahiert, wenn Sie eine Menge davon tun werden.

+1

Ich denke, das möchte ich tun. In dem Fall, dass ich oben in einem der Case-Schalter, anstatt es schaltet alle zwei Sekunden, ich möchte es entweder 4, 5 oder 6 Sekunden. Dies scheint eine gute Möglichkeit zu sein, dies zu tun. Danke –

+0

Glücklich zu helfen. Da Sie neu bei stackoverflow sind, möchte ich darauf hinweisen, dass Sie eine Antwort als akzeptiert markieren sollten, wenn sie Ihr Problem löst. Viel Glück! – McGuireV10

0

Sie können mithilfe Clock.Interval = 3000 Timers Intervall ändern. Timer.Interval Property

Auch gibt es keine Notwendigkeit Start() Verfahren nach Clock.Enabled = true; anrufen, wenn Sie einen Blick auf Start() Implementierung nehmen, ist es nur Enabled zu true setzt.

/// <devdoc> 
/// <para>Starts the timing by setting <see cref='System.Timers.Timer.Enabled'/> to <see langword='true'/>.</para> 
/// </devdoc> 
public void Start() { 
    Enabled = true; 
} 

Quelle: Timer Start()

+0

Vielen Dank für die hilfreichen Informationen. Ich bin immer noch sehr neu in der C# -Programmierung, also versuche ich immer noch, meine Füße zu finden. Ich werde in die Clock.Interval schauen und sehen, was ich finden kann. –

+0

@cavanmcsweney lassen Sie mich wissen, ob es funktioniert. – SeM

+0

Dies wird nicht mehrere Werte gleichzeitig zulassen, so wie ich die Frage interpretiert habe. – McGuireV10

0

Wenn Sie Nutzung begrenzen eines zweiten multiplizieren Sie könnten versuchen, einen Zähler zu schaffen, erhöhen sie in jedem Tick und als ob Zeit ist, ein Verfahren auszuführen:

long seconds; 

    private void Clock_Elapsed(object sender, ElapsedEventArgs e) 
    { 
     seconds++; 
     ExecAction1Second(); -- action taht executes every second 
     if (seconds % 2 == 0) 
      ExecAction2Seconds(); -- action taht executes every 2 seconds 
     if (seconds % 3 == 0) 
      ExecAction3Seconds(); -- action taht executes every 3 seconds 
    } 
Verwandte Themen