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