我可以将匿名函数绑定到计时器的Tick事件吗?

13

如果一个Tick处理函数只在一个上下文中使用(即始终与相同的计时器对象结合使用的同一函数中),为什么要将其作为单独的函数呢?当我想到这个问题时,就有了这样的想法。

是否可以将匿名函数绑定到Timer的tick事件上?这是我正在尝试做的事情。

Timer myTimer = new Timer();
myTimer.Tick += new EventHandler(function(object sender, EventArgs e) {
  MessageBox.Show("Hello world!");
});
3个回答

39

你正在寻找 匿名方法:

myTimer.Tick += delegate (object sender, EventArgs e) {
    MessageBox.Show("Hello world!");
};

你也可以省略参数:

myTimer.Tick += delegate {
    MessageBox.Show("Hello world!");
};
在C# 3.0中,您也可以使用Lambda表达式:Lambda Expression
myTimer.Tick += (sender, e) => {
    MessageBox.Show("Hello world!");
};

7
一个完整的例子如下所示:
    Timer timer = new Timer();
    timer.Interval = 500;
    timer.Tick += (t, args) =>
        {
            timer.Enabled = false;
            /* some code */
        };
    timer.Enabled = true;

4
您可以使用delegate关键字来创建匿名方法:
Timer myTimer = new Timer();
myTimer.Tick += delegate(object sender, EventArgs e) {
  MessageBox.Show("Hello world!");
};

在C# 3.0及更高版本中,您还可以使用lambda表达式:
Timer myTimer = new Timer();
myTimer.Tick += (sender, e) => MessageBox.Show("Hello world!");

1
你可以在 .Net 2.0 中使用 lambda 表达式。你指的是 C# _3.0_。 - SLaks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接