繁体   English   中英

控件上的C#跨线程SendToBack / BringToFront操作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM