Dot-Net

我如何知道 .net 事件是否已被處理?

  • June 8, 2020

我編寫了一些程式碼來處理事件,如下所示:

AddHandler myObject.myEvent, AddressOf myFunction

起初似乎一切正常,但是當我執行調試器時,我發現經常,每次觸發myFunction都會執行幾次。myObject.myEvent我發現我已經允許程式碼添加事件處理程序多次執行,從而導致了這種行為。

有沒有辦法我可以做這樣的事情?

If myObject.myEvent is not handled Then
 AddHandler myObject.myEvent, AddressOf myFunction
End If

刪除處理程序,然後添加它。這樣它就永遠不會被複製。如果您的對像不存在,請注意空引用錯誤。我也被抓住了,當您在創建處理程序的子外部刪除處理程序時可能會發生這種情況。

if not myObject is nothing then RemoveHandler myObject.myEvent, AddressOf myFunction
if not myObject is nothing then AddHandler myObject.myEvent, AddressOf myFunction

我知道這是一篇舊文章,但只是想為那些朝這個方向尋找的人添加一個解決方案……

VB.Net 創建一個特殊的私有成員變數,<YourEvent>Event然後您可以使用它來測試 Nothing。

Public Event MyClick As EventHandler

Private Sub OnMyClick()
   If MyClickEvent IsNot Nothing Then
       RaiseEvent MyClick(Me, New EventArgs())
   Else
       ' No event handler has been set.
       MsgBox("There is no event handler. That makes me sad.")
   End If
End Sub

來自此處的答案:確定是否已附加事件

引用自:https://stackoverflow.com/questions/3477303