Wie oft ... stellt man sich ein komplexes Problem und findet am Ende eine ganz einfache Lösung. So auch hier. Die Frage war: Wie kann ich über meine gesamte Applikation events generieren, welche von irgendwoher aufgerufen und von beliebig vielen Empfängern erhalten werden... Da kommen einem Message Broker, Queues, Hooks und mehr in den Sinn. Doch Sascha Kiefer konnte mich auf Xing auf eine ganz einfache Lösung bringen. Er gab mir zwar einen Hinweis auf Delegates (von C# her) doch mit ein wenig Recherche fand ich heraus, dass ich dies in vb.net gar nicht benötige - es geht wesentlich einfacher.

Auf Codeproject habe ich einen Artikel über Global Events publiziert, hier ein kleiner Extrakt auf deutsch...

Man erstellt eine Klasse für das Globale Eventhandling:

Public Class GlobalEventing
 Public Shared Event DataStored(ByVal sender As Object, ByVal type As String, ByVal msg As String)
 Public Shared Sub TestDataStored()
 RaiseEvent DataStored("x", "x", "x")
 End Sub
End Class

Das steht alles auf 'Public' und 'Shared', damit die Klasse über sämtliche Grenzen hinweg verwendet werden kann.

Das Feuern des Events ist dann sehr einfach:
GlobalEventing.TestDataStored()

Das Empfangen des Events ebenfalls:
'Als Deklaration
Private t As GlobalEventing

'Im Form_Load oder an geeigneter Stelle
 AddHandler t.DataStored, AddressOf test

'Und natürlich die Sub
 Private Sub test(ByVal sender As Object, ByVal typ As String, ByVal msg As String)
 MsgBox("received in reminder")
 End Sub

Selbstverständlich muss das noch mit entsprechenden Parametern etc. ausgebaut werden, das Grundgerüst jedoch läuft :)

Ich habe diese Idee noch einen Schritt weiterverfolgt mit Vererbung. Meine Forms leiten sich von einer Basisklasse ab. Wird dieser Event nun in der Basisklasse empfangen, so erhalten die Childs automatisch diese Voraussetzungen mit. Das ist absolut cool!

Hoffe, jemand kann damit ebenfalls etwas anfangen ... Ein kleines Testprojekt befindet sich ebenfalls auf codeproject.com.