【问题标题】:How do I unhook an lambda event handler inside the lambda method?如何在 lambda 方法中解开 lambda 事件处理程序?
【发布时间】:2015-06-03 13:10:10
【问题描述】:

所以我查看了 SO 并找到了如何解开匿名事件处理程序的方法,这没问题。但我遇到的问题是如何在事件处理程序本身的实例中解开事件处理程序。

例如我有一个计时器:

System.Timers.Timer aTimer = new System.Timers.Timer();
System.Timers.ElapsedEventHandler handler = ((sender, args)
  =>
  {
      //aTimer.Elapsed -= handler;
      wc.CancelAsync();
  });
aTimer.Elapsed += handler;
aTimer.Interval = 100000;
aTimer.Enabled = true;

注释掉这行可以正常工作。但后来我意识到可能存在内存泄漏,因为ElapsedEventHandler 从未脱钩。因此,我尝试将注释掉的行添加到我的 ElapsedEventHanlder 以从自身中解开计时器。

但由于错误,我无法编译代码:

使用未赋值的局部变量“handler”

当我的计时器完成时,是否可以取消我的TimerElapsed 事件?

【问题讨论】:

    标签: c# timer eventhandler


    【解决方案1】:

    拆分声明和变量的分配,它会正常工作。

    System.Timers.ElapsedEventHandler handler = null;
    
    handler = ((sender, args)
      =>
      {
          aTimer.Elapsed -= handler;
          wc.CancelAsync();
      });
    

    变量捕获的工作方式handler在事件触发时不会为空,它将是匿名委托。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 2020-09-27
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多