1

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

4

2 回答 2

5

WaitCallback委托需要 aSystem.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));
}

使用最后一种方法调用时,编译器会有效地为您创建包装器方法。

于 2013-11-05T00:14:30.107 回答
2
ThreadPool.QueueUserWorkItem(_ => testMethod1(true));
于 2013-11-05T00:14:17.563 回答