2012-10-17 58 views
0

我在添加和刪除Visual Basic.NET中的事件處理程序時遇到了一些問題。 雖然這通常很容易,但我需要刪除內聯事件處理程序。問題在於如何以及如何運作。.NET刪除內聯事件處理程序

AddHandler object.ConnectionSuccessful, Sub() 
              RemoveHandler object.ConnectionSuccessful, Me 
             End Sub 

這是我如何嘗試它的方式,它不工作。現在的問題是,如果不是這種方式,我該如何刪除這個內聯事件處理程序?我發現一些殘酷的方法從對象中刪除所有事件處理程序,但這不是我想要做的。我只想刪除這一個特定的事件處理程序。

我知道,如果我只是使用普通函數和AddressOf運算符,那些問題就會消失。但在這種情況下,使用內聯方法更方便。

任何人都有這方面的想法?

+0

你不能。在這種情況下,您必須使用AddressOf運算符,並放棄lambda。 –

回答

1

如果將lambda賦值給一個變量,那麼可以這樣做(假設這種內嵌結構接近你想要的)。請注意,您必須鍵入lambda,在本例中爲Action以便從自身引用自身。

Module Module1 

Event TestEvent As Action 

Sub Main() 

    Dim TestLamba As Action = Sub() 
            Console.Write("Event!") 
            RemoveHandler TestEvent, TestLamba 
           End Sub 

    AddHandler TestEvent, TestLamba 

    RaiseEvent TestEvent() 

    RaiseEvent TestEvent() 

    Console.ReadKey() 

End Sub 

End Module 

如果您在上面運行此測試控制檯應用程序,您會看到該事件被觸發兩次,但是「Event!」只能寫入控制檯一次。

+0

就是這樣!謝謝! – Nitram