如何解决"方法没有重载,需要0个参数?"错误

时间:2016-03-03 15:13:30

标签: c#

在我的简单生产者/消费者多线程项目中,我正在使用自定义队列集合。我像这样定义了TryDequeue ......

public bool TryDequeue(out F data)
{
    data = default(F);
    bool success = false;
    lock (_queueLock)
    {
        if (_queue.Count > 0)
        {
            data = _queue.Dequeue();
            success = true;
            count--;
        }
    }
    return success;
}

当我试着这个......

private static void Consumer()
{
    while (true)
    {
        Thread.Sleep(100);
        string item = null;
        lock (sharedQueue)
        {
            while (sharedQueue.Count == 0)
                Monitor.Wait(sharedQueue);
            item = sharedQueue.TryDequeue();
        }

    Console.WriteLine("Consuming item: {0}", item);
    }
}

这是第二个线程,我收到此错误:

Error   1   No overload for method 'TryDequeue' takes 0 arguments   

任何人都可以帮助我吗?感谢。

2 个答案:

答案 0 :(得分:2)

    while (true)
    {
        Thread.Sleep(100);
        string item = null;
        lock (sharedQueue)
        {
            while (sharedQueue.Count == 0)
                Monitor.Wait(sharedQueue);

            if(sharedQueue.TryDequeue(out item)) //succes!
               ...
            else                                 //something went wrong
               ...
        }

        Console.WriteLine("Consuming item: {0}", item);
    }

您的方法返回bool,您需要将项目与out关键字放在括号之间。现在你没有传递预期的out F data参数。

答案 1 :(得分:1)

item = sharedQueue.TryDequeue();是罪魁祸首。 TryDequeue()需要参数

sharedQueue.TryDequeue(out item);会有效吗?这似乎是你需要做的。