2011-09-23 78 views
2

是否可以在C#中添加文字代碼塊作爲事件處理程序?就像:C#添加事件處理程序文字代碼塊

Timer t = new Timer(1000); 
t.Elapsed += new ElapsedEventHandler({ Console.WriteLine("Tick"); }); 

你可以在PowerShell中做到這一點,所以我認爲可能有一些方法在C#中做到這一點。

回答

10

您可以使用lambda表達式(C#3.0和更高版本):

t.Elapsed += (sender, args) => Console.WriteLine("Tick"); 

或匿名方法(C#2.0和更高):

// If you don't need the parameter values 
t.Elapsed += delegate { Console.WriteLine("Tick"); }; 

// If you do need the parameter values 
t.Elapsed += delegate(Object sender, ElapsedEventArgs args) { 
    Console.WriteLine("Tick from {0}", sender); 
}; 
+0

有趣的是,不知道你可以用'delegate'語法省略參數聲明。 – Davy8

+0

stackoverflow禮節:請問在這裏或在單獨的問題中,我該如何刪除匿名事件處理程序? –

+1

@jmh_gr:搜索它,因爲它之前幾乎肯定被問過:)(但除此之外,請提出一個新問題......答案是您將它分配給一個變量,然後訂閱和取消訂閱相同的變量。) –

2
t.Elapsed += delegate(object sender, ElapsedEventArgs args) 
      { 
       Console.WriteLine["Tick"]; 
      }); 

或者,你也可以使用lambda語法:

t.Elapsed += (sender, args) => { Console.WriteLine["Tick"]; }; 
+1

這將不會工作 - 寫入 - 你需要遠程ve'()'否則它*需要*一個不帶參數的委託類型。 –

+0

@Jon - 是的。意識到我發佈了兩個版本後。修正它們兩個。 –