无法向ThreadPool添加任何内容

时间:2013-11-05 00:12:45

标签: c#

我正在尝试使用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

2 个答案:

答案 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));