C# ThreadPool.QueueUserWorkItem用例

C# ThreadPool.QueueUserWorkItem用例,c#,C#,我试着用这种方法: public void Method() { ThreadPool.QueueUserWorkItem(() => { while(!paused) { ThreadPool.QueueUserWorkItem(() => {...); } }); } } 这个问题是因为它在第一次调用时抛出了一个编译错误

我试着用这种方法:

public void Method()
{
        ThreadPool.QueueUserWorkItem(() =>
        {
            while(!paused)
            {
                ThreadPool.QueueUserWorkItem(() => {...);
            }
        });
    }
}
这个问题是因为它在第一次调用时抛出了一个编译错误

错误CS1593:委托
System.Threading.WaitCallback'不接受
0'参数


你知道怎么做而不争论吗,有其他选择吗?

您可以只为lambda表达式提供一个参数,然后忽略它:

ThreadPool.QueueUserWorkItem(ignored =>
{
    while(!paused)
    {
        ThreadPool.QueueUserWorkItem(alsoIgnored => {...});
    }
});
或者改用匿名方法:

ThreadPool.QueueUserWorkItem(delegate
{
    while(!paused)
    {
        ThreadPool.QueueUserWorkItem(delegate {...});
    }
});

如果您不关心匿名方法的参数,则不必声明它们。

您传递的委托需要接受一个参数。如果要忽略它,可以用任何变量名替换括号。

ThreadPool.QueueUserWorkItem
需要
System.Threading.WaitCallback
委托作为其参数。此委托有一个参数,而lambda表达式没有。如果要忽略该参数,可以使用:

ThreadPool.QueueUserWorkItem(_ =>
{
    //...
});
ThreadPool.QueueUserWorkItem((状态)=>{…;回调需要对象参数。尽管您不必使用它。