C#: Timer-Objekt in einer Konsolen-Anwendung

Das Timer-Objekt in einer Windows-Form ist altbekannt und wird in vielen Anwendungen zu Steuerung oder als „Time-Out“ zur überwachung eingesetzt. In einer Konsolenanwendung steht der Programmierer gelegentlich auch vor dem Problem, dass eine Anwendung überwacht werden muss und man auf einen Time-Out reagieren muss. Was liegt da also näher, als mit einem Timer zu arbeiten? Doch die Tool-Box hält keinen Timer bereit. Also muss einer selbst programmiert werden. Dies ist einfacher, als gedacht, denn System enthält bereits System.Timers. Auf dieser Basis kann sehr schnell ein Timer realisiert werden.
Wir starten in der Main und legen „new System.Timers.Timer“ an. Nun weisen wir „aTimer“ ein Intervall von 5000 Millisekunden zu und starten das ganze („Enabled = true“). Wichtig ist der KeepAlive-Aufruf am Ende der Main.
Nun legen wir eine weitere Funktion (static void) an. Im „OnTimedEvent“ wird dann die eigentliche Timer-Abhandlung untergebracht. In unserem Fall begnügen wir uns mit dem Klassiker der Programmierung: Der Ausgabe von „Hello World!“ in der Konsole.
Wie wir sehen können, ist so ein Timer keine Arbeit und sehr schnell programmiert.

using System;
using System.Collections.Generic;
using System.Text;
using System.Timers;

namespace konsolentest
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Timers.Timer aTimer = new System.Timers.Timer();

            // Hook up the Elapsed event for the timer.
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

            // Setze das Intervall auf 5 Sekunden (5000 milliseconds).
            aTimer.Interval = 5000;
            aTimer.Enabled = true;

            Console.WriteLine("EINGABETASTE drücken um die Konsole zu beenden.");
            Console.ReadLine();

            // Lass den Timer aktiv bis die Main beendet wird
            GC.KeepAlive(aTimer);

        }

        // Hier folgen die Anweisungen im im Timer
        private static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

Schreibe einen Kommentar