Meine Klasse hat ein Ereignis, das externe Objekte abonnieren:
%Vor%Ein internes Listener-Objekt, das auf seinem eigenen Thread läuft, wird jedoch tatsächlich das Ereignis erzeugen.
%Vor%Ich möchte ein Ereignis mit der gleichen Signatur auf dem Listener erstellen und es in der Hauptklasse abonnieren, um es für MessageReceived zu erhöhen. Das scheint ein wenig beschwerlich zu sein, also habe ich mich gefragt, ob es eine ordentliche / idiomatische Art gibt, Ereignisse wie diese weiterzuleiten.
Sie können das Ereignis Hinzufügen / Entfernen von Zugriffsmethoden verwenden, sodass Ereignisse mit der externen Ausrichtung verknüpft werden Ereignis wird an den internen Listener "weitergeleitet"
%Vor%Dies bedeutet, dass Sie ein Ereignis im Listener erstellen müssen, aber der Vorteil ist, dass es keine anderen Installationen gibt, um das Ereignis zu verkabeln.
Wie bereits erwähnt, können Sie eine benutzerdefinierte Abonnementlogik verwenden, indem Sie Handler für Ihre Veranstaltung hinzufügen und entfernen.
Beachten Sie, dass dieses Design ein Problem hat, wie es ist. Sie geben an, dass Ihr Listener das Ereignis in einem eigenen Thread auslöst. Standardmäßig werden die Handler für den Thread aufgerufen, der das Ereignis ausgelöst hat (in Ihrem Fall der Thread des Listeners). Sie haben mehrere Möglichkeiten.
Es gibt einen Blogbeitrag von Roy Osherove, der verschiedene Möglichkeiten zum Ausführen der Async-Aufrufe zeigt: Ссылка (Aber ich würde die asynchronen Aufrufe von Delegaten nicht verwenden und stattdessen direkt auf den ThreadPool zurückgreifen, um die Delegierten aufzurufen.)