c# - 通过匿名委托(delegate)取消订阅事件

标签 c# .net events delegates closures

我想知道如何取消订阅事件中的匿名方法。

我已经检查过Unsubscribe anonymous method in C#但我的情况略有不同。

我正在匿名方法中访问本地函数变量。

代码如下

 private static void Test(Object dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
    {
        if (dependencyPropertyChangedEventArgs.OldValue is ObservableCollection<object>)
        {
            (dependencyPropertyChangedEventArgs.OldValue as ObservableCollection<object>).CollectionChanged -=
                (s, e) => SelectedItemsChanged(dependencyObject, e); // TO FIX event unbsubscription via anonymous delegate
        }

        if (dependencyPropertyChangedEventArgs.NewValue is ObservableCollection<object>)
        {
            (dependencyPropertyChangedEventArgs.NewValue as ObservableCollection<object>).CollectionChanged +=
                (s, e) => SelectedItemsChanged(dependencyObject, e);
        }
    }

最佳答案

不能使用匿名委托(delegate)来做到这一点。 为了能够取消订阅,您必须使用通常委托(delegate)。

关于c# - 通过匿名委托(delegate)取消订阅事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11152635/

相关文章:

c# - 尝试向 Azure 通知中心注册 Xamarin 应用程序时出现未经授权的异常

c# - 如何在 C# 中构建具有未指定数量参数的方法

javascript - MooTools请求失败

jquery - 将多个输入绑定(bind)到 OnKeyPress 事件

c# - 在 C#.NET 中动态转换为类型

c# - 删除表时 ExecuteNonQuery 会返回什么?

.net - 如何获取多选列表框中的最后一个选定项目?

C# 要么返回 false,要么什么都不做

.net-框架和.net常规

JavaFx : Event Filter on Tab (Tab Pane)