代码如下:
Queue<int> queXpTrackerX = new Queue<int>(10);
Queue<int> queXpTrackerY = new Queue<int>(10);
if (iCounterForXpTrack < 10)
{
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
iCounterForXpTrack++;
}//End IF
else
{
queXpTrackerX.Dequeue();
queXpTrackerY.Dequeue();
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}//End else
for (int indexXp = 0; indexXp < iCounterForXpTrack; indexXp++)
{
gXpTracker.DrawEllipse(Pens.Cyan, queXpTrackerX.ElementAt(indexXp) , queXpTrackerY.ElementAt(indexXp), 5, 5);
}//end for
答案 0 :(得分:2)
我怀疑InvalidOperationException最可能的原因是在队列为空时尝试从队列中出队。你有异常消息吗?是'队列空了吗?'?
如果您的iCounterForXpTrack
与队列中的元素数量不同步,就会发生这种情况。最好直接询问队列以避免这种可能的错误:
if (queXpTrackerX.Count < 10)
{
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}
else
{
queXpTrackerX.Dequeue();
queXpTrackerY.Dequeue();
queXpTrackerX.Enqueue(X);
queXpTrackerY.Enqueue(Y);
}
代码失败的一个可能原因是,如果您将iCounterForXpTrack
初始化为10,则认为new Queue<int>(10)
创建了一个以10个元素开头的队列。不是这种情况。队列最初是空的。为队列构造函数提供容量只是性能优化,并不是严格需要的。
您的代码的另一个问题:您应该使用某种Point类和Queue<Point>
,而不是拥有两个队列,一个用于x,一个用于y。这简化了代码并消除了两个队列变得不同步时可能出现的错误。