gpt4 book ai didi

c# - 无法向线程池添加任何内容

转载 作者:太空宇宙 更新时间:2023-11-03 19:12:18 25 4
gpt4 key购买 nike

我正在尝试使用 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# 语言提供了更大的灵 active 。例如,使用 lambda 就简单得多:

public void testMethod2()
{
ThreadPool.QueueUserWorkItem(o => testMethod1(true));
}

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

关于c# - 无法向线程池添加任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19779736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com