避免重复的事件处理程序?

Shi*_*mmy 3 vb.net events event-handling

如何避免事件被处理两次(如果是相同的处理程序?)

Module Module1
  Sub Main()
    Dim item As New Item
    AddHandler item.TitleChanged, AddressOf Item_TitleChanged
    AddHandler item.TitleChanged, AddressOf Item_TitleChanged

    item.Title = "asdf"

    Stop
  End Sub
  Private Sub Item_TitleChanged(sender As Object, e As EventArgs)
    Console.WriteLine("Title changed!")
  End Sub
End Module

Public Class Item
  Private m_Title As String
  Public Property Title() As String
    Get
      Return m_Title
    End Get
    Set(ByVal value As String)
      m_Title = value
      RaiseEvent TitleChanged(Me, EventArgs.Empty)
    End Set
  End Property

  Public Event TitleChanged As EventHandler
End Class
Run Code Online (Sandbox Code Playgroud)

输出:

Title changed!
Title changed!
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Title changed!
Run Code Online (Sandbox Code Playgroud)

我希望事件管理器检测到此事件已由此处理程序处理,因此不应重新处理(或读取)它.

ten*_*our 6

你也可以随时调用RemoveHandler之前AddHandler.我在特定场景中发现了这种实用性.

  • 我同意这有点奇怪,但由于对事件的控制有限,这实际上是一种非常常见的方法,因为它定义明确且优雅。 (2认同)