【发布时间】:2012-04-12 12:43:27
【问题描述】:
我在VB.NET 中搜索了关于使用关键字Handles 而不是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
为什么会这样?
【问题讨论】:
-
你正在尝试监听你的 own 事件。没有意义,一些 other 类会对您的活动感兴趣。 vb 编译器只实现了 Handles 的合理使用。如果需要这种模式,请使用虚拟方法。
-
是的,你是对的,这不是一个好的实现,但我写这个是为了测试事件系统。
标签: vb.net event-handling