Ok, I have a winforms app and my code works fine. But I want to know if my code is bullet proof or if it only works without load.
Let me explain it:
I have a windows form where I have overridden the OnKeyDown method:
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
dim args as new ActionEventArgs(ActionType.Bark)
RaiseEvent Action(me, args)
e.Handled = args.Handled
MyBase.OnKeyDown(e)
End Sub
As you can see I raise an custom event and query the Handled Variable of it afterwards. My Event / ActionEventArgs looks like this:
Public Event Action(sender as Object, e as ActionEventArgs)
Public Class ActionEventArgs
Inherits EventArgs
Public Handled as Boolean
Public Action as Action
Public Sub New(ByVal action as ActionType)
Me.Action = action
End Sub
End Class
where ActionType is this Enum
Public Enum ActionType
Bark,
Jump,
FireNukeWithoutFurtherWarning
End Enum
Now I have a class that is registered to this event and, if it knows how to handle the ActionType it sets Handled to true.
Public Sub actionHandler(ByVal sender as Object, e as ActionEventArgs) Handles me.Action
If e.Handled then return
If e.Action = ActionType.Bark
Bark()
e.Handled = true
End If
End If
I tried this code at my developer machine and it seems to work. In the OnKeyDown Method, everytime I query the Handled variable, my actionHandler method did run first.
But I asking me if this is only the case because my developer machine is in idle state and the event queue is processed so fast or can I expect the
RaiseEvent(...)
method to wait until every registered EventHandler has finished it's taks?