【发布时间】:2012-01-02 01:52:49
【问题描述】:
我正在开发一款纸牌游戏。我用 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?
提前致谢
【问题讨论】:
-
你应该使用 BeginInvoke 而不是 Invoke。
标签: c# controls z-index picturebox multithreading