如何取消订阅类的Dispose方法中的匿名函数

本文关键字:方法 Dispose 函数 何取消 取消 | 更新日期: 2023-09-27 18:28:15

我在它的构造函数中有一个class a。。。我正在为Object_B的事件处理程序分配一个匿名函数。

如何从类A的Dispose方法中删除(取消订阅)它?

任何帮助都将不胜感激!感谢

Public Class A
{
public A()
 {
 B_Object.DataLoaded += (sender, e) =>
                {
                   Line 1
                   Line 2
                   Line 3
                   Line 4
                };
 }
Public override void Dispose()
{
  // How do I unsubscribe the above subscribed anonymous function ?
}
}

如何取消订阅类的Dispose方法中的匿名函数

基本上你做不到。要么将其移动到一个方法中,要么使用成员变量保留委托以备以后使用:

public class A : IDisposable
{
    private readonly EventHandler handler;
    public A()
    {
        handler = (sender, e) =>
        {
           Line 1
           Line 2
           Line 3
           Line 4
        };
        B_Object.DataLoaded += handler;
     }
     public override void Dispose()
     {
        B_Object.DataLoaded -= handler;
     }
}

这是一种不使用处理程序变量的替代方法。

Public Class A
{
 public A()
  {
    B_Object.DataLoaded += (sender, e) =>
                {
                   Line 1
                   Line 2
                   Line 3
                   Line 4
                };
  }
  Public override void Dispose()
  {
   if(B_Object.DataLoaded != null)
   {
     B_Object.DataLoaded -=
         (YourDelegateType)B_Object.DataLoaded.GetInvocationList().Last();
       //if you are not sure that the last method is yours than you can keep an index
       //which is set in your ctor ...
   }
  }
 }

正确的方法是使用Rx扩展。点击此处观看视频:

http://msdn.microsoft.com/en-us/data/gg577611

我发现"布鲁斯"电影特别有用。