我搜索過有關使用關鍵字的Handles代替AddHandler的,在VB.NET的差別,但我無法解釋爲什麼這個代碼不工作..差Vs的AddHandler
Imports System.Threading
Public Class MyClass_EventArgs
Inherits System.EventArgs
End Class
Public Class MyClass
Public Event MainThreadFinished(ByVal sender As Object, ByVal e As MyClass_EventArgs)
Private WithEvents MyEvents As MyClass
Private trd As Thread
Public Sub New()
'AddHandler MainThreadFinished, AddressOf Me.MyEvents_ThreadFinished
trd = New Thread(AddressOf mainThread)
trd.IsBackground = True
trd.Start()
RaiseEvent MainThreadFinished(Me, Nothing)
End Sub
Protected Overrides Sub Finalize()
trd.Abort()
End Sub
Protected Sub MyEvents_ThreadFinished(ByVal sender As Object, ByVal e As MyClass_EventArgs) _
Handles MyEvents.MainThreadFinished
MessageBox.Show("AAA")
End Sub
Private Sub mainThread()
RaiseEvent MainThreadFinished(Me, Nothing)
End Sub
End Class
那麼,這個代碼永遠不會響應事件,但如果我取消了跟隨着行,代碼工作和消息框出現...
'AddHandler MainThreadFinished, AddressOf Me.MyEvents_ThreadFinished
爲什麼會出現這種情況?
您正試圖聆聽您*自己的*事件。沒有任何意義,一些其他*班會對你的活動感興趣。 vb編譯器只實現Handles的有意識的使用。如果需要這種模式,請使用虛擬方法。 – 2012-04-12 13:31:31
是的,你是對的,這不是一個好的實現,但我寫這個測試事件系統。 – Katte 2012-04-12 14:03:37