ThreadPool.QueueUserWorkItem use case
本文关键字:case use QueueUserWorkItem ThreadPool | 更新日期: 2023-09-27 18:28:55
我正试图以这种方式使用该方法:
public void Method()
{
ThreadPool.QueueUserWorkItem(() =>
{
while(!paused)
{
ThreadPool.QueueUserWorkItem(() => {...);
}
});
}
}
问题的出现是因为它在第一次调用中向我抛出了一个编译错误。
错误CS1593:委托
System.Threading.WaitCallback' does not take
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(_ =>
{
//...
});
您传递的委托需要接受一个参数。如果您想忽略它,您可以将括号替换为任何变量名。