C# 我无法在c中进行队列同步#

C# 我无法在c中进行队列同步#,c#,C#,我正在用unity3d用c#创建一个游戏。这有点像“交通狂热”。我需要让排队的车排队,过马路的时候让他们下车。当我排队的时候,效果很好。。但当我将其出列时,我有一个例外: “InvalidOperationException:由于对象的当前状态,操作无效” 以下是我的队列代码: public Queue UD_queue; public int score; void Awake(){ InitQueues(); score = 0; } public void

我正在用unity3d用c#创建一个游戏。这有点像“交通狂热”。我需要让排队的车排队,过马路的时候让他们下车。当我排队的时候,效果很好。。但当我将其出列时,我有一个例外:

“InvalidOperationException:由于对象的当前状态,操作无效”

以下是我的队列代码:

public Queue UD_queue;

public int score;

void Awake(){
    InitQueues();
        score = 0;
}


public void InitQueues(){
    DU_queue = new Queue();
    Debug.Log("queue initialized");
}

private Queue syncQ(Queue q){
    Queue sync_q = Queue.Synchronized(q);
    return sync_q;
}

public void DoEnqueue(GameObject go){
    lock(DU_queue)
        DU_queue.Enqueue(go);
}

public void DoDequeue(){
    lock(DU_queue)
        DU_queue.Dequeue();
        score +=500;
}
在另一个类中,我调用方法DoEnqueue()和DoDequeue()


有人能告诉我锁(){}为什么不工作吗?

使用如何。您不再需要在该队列上使用任何锁。

显然有多个线程访问该队列。请发布一个简短但完整的程序来演示这个问题。为什么不使用ConcurrentQueue呢?简单的解释是,您在一个空队列上调用了Dequeue()。没有证据表明您在拨打电话之前检查了队列是否为空。你使用锁的方式肯定会增加犯这个错误的几率。thnxx:)我加了支票。。现在已经修好了,明智的做法是使用带大括号的锁。