2015-06-03 22 views
2

所以我看着SO,發現如何解除匿名事件處理程序,這是沒有問題的。但是我遇到的問題是如何在事件處理程序本身的實例中解除事件處理程序。如何在lambda方法內解開一個lambda事件處理程序?

比如我有一個計時器:

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中以從本身解除定時器。

但我不能編譯代碼,因爲錯誤的:

Use of unassigned local variable "handler"

是否可以解開Elapsed事件我Timer我的計時器完成時?

回答

4

拆分你的變量的declration和賦值,它會正常工作。

System.Timers.ElapsedEventHandler handler = null; 

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

的方式可變捕捉工作handler不會是空當事件觸發時,這將是匿名委託。

相關問題