2 Stimmen

C# - Wiederholung eines Methodenaufrufs mit Timern

In einem VSTO-Add-In, das ich entwickle, muss ich eine Methode mit einer bestimmten Verzögerung ausführen. Das Schwierige daran ist, dass die Methode zwischen 0,1 und 1 Sekunde für die Ausführung benötigen kann. Ich verwende derzeit eine System.Timers.Timer wie diese:

    private Timer tmrRecalc = new Timer();

    // tmrRecalc.Interval = 500 milliseconds

    private void tmrRecalc_Elapsed(object sender, System.Timers.ElapsedEventArgs e){

        // stop the timer, do the task
        tmrRecalc.Stop();           
        Calc.recalcAll();
        
        // restart the timer to repeat after 500 ms
        tmrRecalc.Start();
    }

Die im Grunde startet, wirft 1 vergehen Ereignis, nach dem es für die beliebige Länge Aufgabe ausgeführt wird gestoppt. Aber der UI-Thread scheint für 3-5 Sekunden zwischen jeder Aufgabe zu hängen.

Haben Timer eine "Aufwärmzeit" für den Start? Dauert es deshalb so lange, bis die erste (und letzte) Zeit verstrichen ist?

Welche Art von Zeitschaltuhr kann ich stattdessen verwenden?

2voto

Tesserex Punkte 16756

Vielleicht dauern Ihre Berechnungen länger, als Sie dachten. Zeitmesser haben keine Aufwärmphase.

Gibt es irgendeinen Grund, warum Sie nicht einen Hintergrund-Thread, vielleicht ein BackgroundWorker-Objekt verwenden können, um die Berechnungen auszuführen, ohne einen Timer zu benötigen?

2voto

Cyril Gupta Punkte 13086

Anstatt einen Timer zu verwenden, empfehle ich, die Berechnungen in einem anderen Thread durchzuführen (einen Thread spawnen), und mit Thread.Sleep(Millisekunden) zwischen den Intervallen zu schlafen. Das hat bei mir ganz wunderbar funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X