没有参数的委托

时间:2014-03-11 15:15:56

标签: c# delegates

我收到了这段代码

ThreadPool.QueueUserWorkItem(delegate(object state) { MessageBox.Show("somethinghere"); });

有没有办法更好地做到这一点?我使用delegate(object state)但我甚至不需要这个,但是当我使用delegate()时,它会给我一个错误!

3 个答案:

答案 0 :(得分:1)

你可以这样做:

ThreadPool.QueueUserWorkItem(delegate { ... });

ThreadPool.QueueUserWorkItem(_ => { ... });

答案 1 :(得分:0)

您可以完全省略参数列表:

ThreadPool.QueueUserWorkItem(delegate { MessageBox.Show("somethinghere"); });

或者你可以使用lambda:

ThreadPool.QueueUserWorkItem(s => MessageBox.Show("somethinghere"));

答案 2 :(得分:0)

方法ThreadPool.QueueUserWorkItem期望委托作为参数声明如下:

public delegate void WaitCallback(object state);

如果你使用delegate(),它会给出一个错误,因为你没有匹配委托签名,这需要一个对象作为输入,void需要返回。

您可以使用lambda表达式,如下所示:

ThreadPool.QueueUserWorkItem(state => MessageBox.Show("somethinghere"));

或者您可以创建一个匹配该签名的方法:

private void waitCallBackMethod(object state)
{
    MessageBox.Show("somethinghere");
}

然后在这样的电话上使用它:

ThreadPool.QueueUserWorkItem(waitCallBackMethod);