VB.NET RemoveHandler и анонимные методы

Как использовать RemoveHandler с анонимными методами?

Вот как я добавляю обработчик события MyEvent класса MyClass:

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

Как мне использовать RemoveHandler для удаления обработчика события MyEvent?


person acermate433s    schedule 16.09.2011    source источник


Ответы (1)


В общем, если вам нужно отписаться от события, я бы рекомендовал не использовать такую ​​лямбду, а вместо этого использовать стандартный метод.

При этом вы все еще можете использовать анонимный метод, но вам нужно сохранить ссылку на него для отписки. Если вы должны отменить подписку на анонимный метод, как минимум, вы должны сохранить делегат в переменной, чтобы удалить его позже:

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

AddHandler MyClass.MyEvent, subscription

' Later   
RemoveHandler MyClass.MyEvent, subscription
person Reed Copsey    schedule 16.09.2011
comment
Имеет смысл. Если это так, нет смысла использовать анонимные методы, когда мне придется удалить их позже. - person acermate433s; 16.09.2011
comment
@acermate433s: Верно, поэтому я предложил использовать стандартный метод. Единственное преимущество лямбды, хотя, это то, что вы можете закрыть локальные переменные вместо того, чтобы продвигать их на уровень класса, что иногда может быть полезно... - person Reed Copsey; 16.09.2011