Home > Allgemein > Custom Event

Custom Event

21. August 2009 admin

Während der Softwareentwicklung hat man sehr viel mit Events zu tun. Meistens werden diese von bestimmten Klassen zur Verfügung gestellt. Die gängisten Events sind sicherlich dienenigen der GUI Komponenten. Häufig liefern die Events Zusatzinformationen in Form vom Parametern, welche man danach auswerten kann. Doch was ist, wenn man eigene Events programmieren und diesen eigene Parameter übergeben möchte?

In C# ist dies wirklich sehr einfach gelöst. Es benötigt nur ein paar Zeilen Code und schon hat man einen eigenen Event erstellt, der von überallher angezapft werden kann. Als kleines Beispiel habe ich ein Konsolenanwendung geschrieben, welche eine boolsche Variable hat, welche regelmässig ihren Wert ändert. Da man aber zum Vornherein nicht genau weis, wann das sein wird, wird ein Event zur Verfügung gestellt welche alle horchenden Objekte benachrichtigt. Bei einer erhaltenen Benachrichtigung wird dies auf dem Konsolenfenster ausgegeben.

Download

Dies ist die Klasse die den Event zur Verfügung stellt und ihn nötigenfalls abfeuert:

using System;
using System.Timers;

namespace EventExample
{
    public delegate void FlagValueChangedEventHandler(bool newValue);

    public class EventSource
    {
        public event FlagValueChangedEventHandler FlagValueChanged;
        private bool m_Flag;
        private Timer m_Timer = new Timer();
        private Random m_Random = new Random();

        /// <summary>
        /// Konstruktor
        /// </summary>
        public EventSource()
        {
            //Event für Timer wird angezapt
            m_Timer.Elapsed += new ElapsedEventHandler(m_Timer_Elapsed);
        }

        /// <summary>
        /// Berechnet den neuen Interval und starten den Timer
        /// </summary>
        public void Start()
        {
            //Zufälliges Intervall zwischen 1 und 10 Sekunden wird ermittelt
            m_Timer.Interval = (m_Random.Next(9) + 1) * 1000;

            //Timer wird gestartet
            m_Timer.Start();
        }

        /// <summary>
        /// Ereignis welches auftritt wenn die Intervalzeit abgelaufen ist
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void m_Timer_Elapsed(object sender, ElapsedEventArgs e)
        {
            //Timer wird gestoppt
            m_Timer.Stop();

            //Wert des boolschen Flags wird geändert
            m_Flag = !m_Flag;

            //Wenn jemand auf den Event horcht wird dieser abgefeuert
            if (FlagValueChanged != null)
            {
                FlagValueChanged(m_Flag);
            }

            //Spiel beginnt wieder von neuem
            Start();
        }

    }
}
KategorienAllgemein Tags:
Kommentare sind geschlossen