Zuverlässige Timer in einer Konsolenanwendung

stimmen
78

Ich bin mir bewusst , dass in .NET gibt es drei Timer - Typen (siehe die Timer - Klassen in .NET Framework - Klassenbibliothek Vergleich ). Ich habe einen Gewinde Timer als die anderen Typen gewählt kann driften , wenn der Haupt - Thread beschäftigt ist, und ich brauche diese zuverlässig.

Die Art und Weise dieser Timer in der Steuerung des Timer arbeitet auf einem anderen Thread gestellt, so dass es immer mit der Arbeit tick entlang kann auf dem übergeordneten Thread abgeschlossen beginnen, wenn es nicht belegt ist.

Das Problem mit diesen Timer in einer Konsolenanwendung ist, dass, während die Zeit der Haupt-Thread entlang auf einem anderen Thread tickt nichts tut, so dass die Anwendung geschlossen wird.

Ich habe versucht , das Hinzufügen einer while trueSchleife, aber dann der Haupt - Thread ist zu sehr damit beschäftigt , wenn der Timer ausgeschaltet geht.

Veröffentlicht am 01/08/2008 um 13:43
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
50

Sie können etwas verwenden wie Console.ReadLine()der Haupt - Thread zu blockieren, so dass andere Hintergrund - Threads (wie Timer - Threads) werden immer noch funktionieren. Sie können auch eine Verwendung Autoreset die Ausführung zu blockieren, dann (wenn Sie benötigen) Sie können auf diesem Autoreset Objekt Set () -Methode aufrufen , den roten Faden zu lösen. Achten Sie auch darauf , dass Ihr Verweis auf Timer - Objekt nicht aus Umfang und Müll geht gesammelt.

Beantwortet am 01/08/2008 um 13:56
quelle vom benutzer

stimmen
17

Betrachten wir ein mit Manual den roten Faden am Ende seiner Verarbeitung zu blockieren, und rufen Reset()Sie einmal die Verarbeitung des Timers beendet hat. Ist dies etwas, das ständig laufen muss, sollten diese in einen Serviceprozess zu bewegen , anstatt einer Konsole App.

Beantwortet am 01/08/2008 um 13:55
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more