如何在lambda方法中解开lambda事件处理程序?

use*_*er1 3 c# timer eventhandler

因此,我查看了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;
Run Code Online (Sandbox Code Playgroud)

随着行注释掉,这很好。但是后来我意识到可能存在内存泄漏,因为ElapsedEventHandler它永远不会被钩住。因此,我尝试将注释掉的行添加到我的行中,ElapsedEventHanlder以将计时器从其自身上取消。

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

使用未分配的局部变量“处理程序”

我的计时器完成后,是否可以解开Elapsed我的事件Timer

Sco*_*ain 5

拆分磁偏角和变量的赋值,它将正常工作。

System.Timers.ElapsedEventHandler handler = null;

handler = ((sender, args)
  =>
  {
      aTimer.Elapsed -= handler;
      wc.CancelAsync();
  });
Run Code Online (Sandbox Code Playgroud)

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