Figure 2 Multiple Event Handlers
' From frmMain.vb
Private Sub EventHandler2( _
ByVal NewFile As System.IO.FileInfo) _
Handles fs2.FileFound, fs3.FileFound, fs4.FileFound
AddText("EventHandler2: " & NewFile.FullName)
End Sub
Private Sub EventHandler3( _
ByVal NewFile As System.IO.FileInfo) _
Handles fs2.FileFound, fs3.FileFound, fs4.FileFound
AddText("EventHandler3: " & NewFile.FullName)
End Sub
Figure 4 One Event Handler Raises an Error
' From frmMain.vb
Private Sub EventHandler2( _
ByVal NewFile As System.IO.FileInfo) _
Handles fs2.FileFound, fs3.FileFound, fs4.FileFound
AddText("EventHandler2: " & NewFile.FullName)
End Sub
Private Sub EventHandler3( _
ByVal NewFile As System.IO.FileInfo) _
Handles fs2.FileFound, fs3.FileFound, fs4.FileFound
AddText("EventHandler3: " & NewFile.FullName)
End Sub
Private Sub EventHandler4( _
ByVal NewFile As System.IO.FileInfo) _
Handles fs3.FileFound, fs4.FileFound
AddText("EventHandler4: Throwing exception!")
Throw New ArgumentException
End Sub
Figure 6 RaiseEvent Compiled to MSIL
Figure 7 Catch Errors for Each Listener
' From FileSearch4.vb
Dim ListenerList() As System.Delegate
Dim Listener As FileFoundEventHandler
ListenerList = FileFoundEvent.GetInvocationList()
' Search for matching file names.
Dim afi() As FileInfo = diLocal.GetFiles(Me.FileSpec)
For Each fi As FileInfo In afi
For Each Listener In ListenerList
Try
Listener.Invoke(fi)
Catch
' Something goes wrong? Just move on to
' the next event handler.
End Try
Next
alFiles.AddRange(afi)
Next
Figure 8 FileFoundEventArgs Class
' From FileFoundEventsArgs.vb
Public Class FileFoundEventArgs
Inherits EventArgs
Private mfi As FileInfo
Public ReadOnly Property FileFound() As FileInfo
Get
Return mfi
End Get
End Property
Public Sub New(ByVal fi As FileInfo)
' Store the FileInfo object for later use.
mfi = fi
End Sub
End Class
Figure 10 Generated Empty Event
Public Custom Event FileFound As FileFoundEventHandler
AddHandler(ByVal value As FileFoundEventHandler)
End AddHandler
RemoveHandler(ByVal value As FileFoundEventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As FileFoundEventArgs)
End RaiseEvent
End Event
Figure 11 The Custom Event
Private listeners As New List(Of FileFoundEventHandler)
Public Custom Event FileFound As FileFoundEventHandler
AddHandler(ByVal value As FileFoundEventHandler)
listeners.Add(value)
End AddHandler
RemoveHandler(ByVal value As FileFoundEventHandler)
If listeners.Contains(value) Then
listeners.Remove(value)
End If
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As FileFoundEventArgs)
For Each listener As FileFoundEventHandler In listeners
Try
listener.Invoke(sender, e)
Catch ex As Exception
' Something goes wrong? Just move on to the next handler.
End Try
Next
End RaiseEvent
End Event