[英]C# cross-thread SendToBack/BringToFront operations on controls
我正在开发纸牌游戏。 我用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进行安全的跨线程更改?
提前致谢
最简单的方法是在循环结束时全部跳过调用:
foreach (CardPictureBox cardPB in Collection)
{
cardPB.BringToFront();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.