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((状态)=>{…;回调需要对象参数。尽管您不必使用它。