【问题标题】:ThreadPool.QueueUserWorkItem use caseThreadPool.QueueUserWorkItem 用例
【发布时间】:2012-03-26 06:28:38
【问题描述】:

我正在尝试以这种方式使用该方法:

public void Method()
{
        ThreadPool.QueueUserWorkItem(() =>
        {
            while(!paused)
            {
                ThreadPool.QueueUserWorkItem(() => {...);
            }
        });
    }
}

问题的出现是因为它在第一次调用时引发了编译错误。

错误 CS1593:委托 System.Threading.WaitCallback' does not take 0' 参数

知道如何在没有参数的情况下做到这一点吗? ,有什么选择吗?

【问题讨论】:

  • ThreadPool.QueueUserWorkItem((state) => {...);回调需要对象参数。虽然你不必使用它。

标签: c#


【解决方案1】:

您可以只为 lambda 表达式提供一个参数,而忽略它:

ThreadPool.QueueUserWorkItem(ignored =>
{
    while(!paused)
    {
        ThreadPool.QueueUserWorkItem(alsoIgnored => {...});
    }
});

或者改用匿名方法:

ThreadPool.QueueUserWorkItem(delegate
{
    while(!paused)
    {
        ThreadPool.QueueUserWorkItem(delegate {...});
    }
});

如果您不关心匿名方法的参数,则不必声明它们。

【讨论】:

    【解决方案2】:

    ThreadPool.QueueUserWorkItem 需要 System.Threading.WaitCallback 委托作为其参数。这个委托有一个参数,而你的 lambda 表达式没有。如果你想忽略可以使用的参数:

    ThreadPool.QueueUserWorkItem(_ =>
    {
        //...
    });
    

    【讨论】:

      【解决方案3】:

      您传递的委托需要接受一个参数。如果你想忽略它,你可以用任何变量名替换括号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 2011-09-05
        • 2011-03-04
        • 2014-07-29
        • 1970-01-01
        • 2014-01-08
        • 2012-03-01
        相关资源
        最近更新 更多