我正在尝试使用ThreadPool
,但它给了我错误:
class test
{
public void testMethod1(bool param)
{
var something = !param;
}
public void testMethod2()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(testMethod1), true); //expected a 'void testMethod1(object) signature'
ThreadPool.QueueUserWorkItem(new WaitCallback(testMethod1(true))); //method name is expected
}
}
如何正确使用ThreadPool
?
答案 0 :(得分:4)
WaitCallback delegate需要System.Object
作为其参数。您需要使用它来传递值。
private void TestMethodWrapper(object param)
{
TestMethod1((bool)param);
}
public void TestMethod1(bool param)
{
var something = !param;
}
public void testMethod2()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(TestMethodWrapper), true);
}
这是早期的常见模式,但目前的C#语言允许更大的灵活性。例如,使用lambda要简单得多:
public void testMethod2()
{
ThreadPool.QueueUserWorkItem(o => testMethod1(true));
}
使用最后一个方法调用时,编译器会为您有效地创建包装器方法。
答案 1 :(得分:2)
ThreadPool.QueueUserWorkItem(_ => testMethod1(true));