我试图以这种方式使用该方法:
public void Method()
{
ThreadPool.QueueUserWorkItem(() =>
{
while(!paused)
{
ThreadPool.QueueUserWorkItem(() => {...);
}
});
}
}
问题来了,因为它在第一次调用时抛出了编译错误。
错误CS1593:委派
System.Threading.WaitCallback' does not take
0'参数
如何在没有参数的情况下做到这一点? ,任何替代方案?
答案 0 :(得分:12)
您可以只提供lambda表达式的参数,并忽略它:
ThreadPool.QueueUserWorkItem(ignored =>
{
while(!paused)
{
ThreadPool.QueueUserWorkItem(alsoIgnored => {...});
}
});
或者使用匿名方法:
ThreadPool.QueueUserWorkItem(delegate
{
while(!paused)
{
ThreadPool.QueueUserWorkItem(delegate {...});
}
});
如果您不关心匿名方法的参数,则不必说明它们。
答案 1 :(得分:2)
ThreadPool.QueueUserWorkItem
需要System.Threading.WaitCallback
个委托作为参数。这个委托有一个参数,而你的lambda表达式没有。如果您想忽略您可以使用的参数:
ThreadPool.QueueUserWorkItem(_ =>
{
//...
});
答案 2 :(得分:0)
您传递的委托需要一个参数。如果你想忽略它,你可以用任何变量名替换括号。