2015-11-06 46 views
1

请参阅下面的代码:哪个事件处理程序首先被调用?

Imports ComponentAndControl 

Public Class Form1 

    Delegate Function Compare1(ByVal intNumber1 As Integer, ByVal intNumber2 As Integer) As Boolean 
    Public Event e() 
    Public Event e2(ByVal o As Object, e As EventArgs) 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load 

     Dim Test As New TestEventArgs 
     Test.Name = "Bert" 
     Test.Age = 34 

     RaiseEvent e2(Me, Test) 
    End Sub 

    Public Sub TestHandler4(ByVal o As Object, ByVal e As TestEventArgs) Handles Me.e2 
     MsgBox(e.Name) 
     MsgBox(e.Age) 
    End Sub 

    Public Sub TestHandler5(ByVal o As Object, ByVal e As TestEventArgs) Handles Me.e2 
     MsgBox(e.Name) 
     MsgBox(e.Age) 
    End Sub 
End Class 

Public Class TestEventArgs 
    Inherits EventArgs 

    Public Name As String 
    Public Age As Integer 

End Class 

哪个事件处理程序首先调用?即TestEventHandler4或TestEventHandler5?有没有可能配置这个?

+0

在你的例子中没有意义为什么你会有两个事件方法为同一事件。在你的代码中,这会成为一个问题? – LarsTech

回答

3

.Net规范中未定义调用MultiCastDelegate时的事件顺序。通常按照它们添加的顺序调用它们,按照代码顺序调用,但不要依赖它。


UPDATE

这MSDN文章似乎表明,调用顺序是现在保证是加入他们的顺序。实际上我没有实际验证过这一点,我不确定添加了自动连线事件的顺序。 https://msdn.microsoft.com/en-us/library/system.multicastdelegate(v=vs.110).aspx

+0

我认为这是代码顺序开始,但我发现情况并非如此。我不依赖订单;我只是好奇而已。你有任何链接来支持你的说法吗? – w0051977

相关问题