2011-09-16 26 views
17

Làm cách nào để sử dụng RemoveHandler với các phương thức ẩn danh?VB.NET RemoveHandler & Anonymous Methods

Đây là cách tôi thêm một handler cho MyEvent sự kiện của lớp MyClass

AddHandler MyClass.MyEvent, Sub() 
           ... 
          End Sub 

Làm thế nào để sau đó sử dụng RemoveHandler để loại bỏ các handler cho sự kiện MyEvent

Trả lời

26

Trong nói chung, nếu bạn cần hủy đăng ký khỏi sự kiện, tôi khuyên bạn không nên sử dụng lambda như thế này và thay vào đó sử dụng phương pháp chuẩn.

Điều đó đang được nói, bạn vẫn có thể sử dụng phương pháp ẩn danh, nhưng bạn cần phải lưu trữ một tham chiếu đến nó để hủy đăng ký. Nếu bạn phải hủy đăng ký một phương thức ẩn danh, ở mức tối thiểu, bạn nên lưu trữ đại biểu trong một biến để xóa nó sau này:

Dim subscription = Sub() 
          ' ... 
        End Sub 

AddHandler MyClass.MyEvent, subscription 

' Later 
RemoveHandler MyClass.MyEvent, subscription 
+1

Làm cho các giác quan. Nếu đó là trường hợp không có điểm bằng cách sử dụng các phương pháp vô danh khi tôi phải loại bỏ nó sau này. – acermate433s

+1

@ acermate433s: Đúng, đó là lý do tôi đề xuất sử dụng phương pháp chuẩn. Một lợi thế của một lambda, thoguh, là bạn có thể đóng các biến cục bộ thay vì đẩy chúng lên cấp lớp, điều này có thể hữu ích vào các thời điểm ... –

Các vấn đề liên quan