不带参数的委托

本文关键字:参数 | 更新日期: 2023-09-27 17:49:27

我得到了这个代码

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

有更好的方法吗?我使用delegate(object state),但我甚至不需要这个,但当我使用delegate()时,它会给我一个错误!

不带参数的委托

你可以这样做:

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

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

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

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

或者你可以使用lambda:

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

方法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);