2015-11-06 41 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

相關問題