我正在开发纸牌游戏。我用PictureBox类代表了卡片。我有一个游戏,玩家将卡片一个接一个地放在另一个上面。所有这些卡的Z-index都不同,当卡放在顶部时,我用这段代码给它顶部的z-index:
PictureBox cardPictureBox = move.Card.CardPictureBox;
if (cardPictureBox.InvokeRequired)
cardPictureBox.Invoke(new MethodInvoker(cardPictureBox.BringToFront));
此代码工作正常,并且所有卡片都应该在他们应该的时候被带到前面。这场比赛结束时我遇到了问题。那时我需要将PictureBox对象放回原来的位置。我把它们放回去,但是现在它们没有订购,因为我在Designer中订购它们。我必须重新安排他们的z索引。我使用相同的代码执行此操作,但是在循环中我为每张卡执行相同的操作。
程序不会抛出异常,只是冻结,就是这样!?!?! 有人遇到过这个问题,并且有答案吗?
如何在不冻结程序的情况下对PictureBox z-index进行安全的跨线程更改?
提前致谢
答案 0 :(得分:0)
最简单的方法是在最后一个循环中完成所有操作时跳过调用:
foreach (CardPictureBox cardPB in Collection)
{
cardPB.BringToFront();
}