// Diese Methode schickt eine Fehlernachricht asynchron ab. Auch hierbei
        // werden wieder alle registrierten Abonnementen benachrichtigt.
        public static void SendErrorMessageAsync(ErrorMessageEventArgs eventArgs)
        {
            // Implementierung der SendErrorMessage-Methode
            ErrorMessageEventHandler handler;

            // Der Handler muss gesperrt werden, da ihn verschiedene Threads
            // aufrufen können.
            lock(_lockError)
            {
                handler = ErrorMessageFired;
            }

            // Wenn es keine Abonnementen gibt, ist der Handler NULL.
            if(handler != null)
            {
                // Jeder Abonnement kann in verschiedenen Threads benachrichtigt werden.
                Delegate[] invocationList = handler.GetInvocationList();

                foreach(ErrorMessageEventHandler eventHandler in invocationList)
                {
                    try
                    {
                        // Führe nun durch die interne Klasse den Eventhandler in allen
                        // nötigen Threads aus.
                        ErrorMessageEventNotifier eventNotifier = new ErrorMessageEventNotifier(eventHandler);
                        ThreadPool.QueueUserWorkItem(eventNotifier.Start, eventArgs);
                    }
                    // Wenn es zu einem Fehler kommen sollte, soll nichts weiter gemacht werden
                    // und nur der nächste Handler aufgerufen werden.
                    catch { }
                }
            }
        }
Exemple #2
0
        static void MessageBroker_ErrorMessageFired(ErrorMessageEventArgs e)
        {
            // Verarbeite die Nachricht
            Console.WriteLine("Error: {0}", e.Message);

            if(e.Exception != null)
            {
                // Verarbeite den Fehler
            }
        }