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

最佳答案

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));
}


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

关于c# - 无法将任何东西添加到ThreadPool,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19779736/

10-12 12:25