C # межпотоковые операции SendToBack / BringToFront над элементами управления - PullRequest
0 голосов
/ 20 ноября 2011

Я занимаюсь разработкой карточной игры. Я представил карты с классом PictureBox. У меня есть игра, в которой игроки кладут карты друг на друга, одну за другой. Z-индекс всех этих карт различен, и когда карта помещается сверху, я даю ей верхний z-индекс с этим кодом:

PictureBox cardPictureBox = move.Card.CardPictureBox;
if (cardPictureBox.InvokeRequired) 
    cardPictureBox.Invoke(new MethodInvoker(cardPictureBox.BringToFront));

Этот код работает нормально, и все карты выводятся на передний план, когда они должны. У меня проблема, когда эта игра заканчивается. Именно тогда мне нужно вернуть объекты PictureBox на прежнее место. Я положил их обратно, но теперь они не заказаны, как я заказал их в Designer. Я должен изменить их z-индексы. Я делаю это с тем же кодом, но в цикле, где я делаю одно и то же для каждой карты.

Программа не выдает исключение, а просто зависает, и все тут!?!?! Кто-нибудь сталкивался с этой проблемой, и есть ли у нее ответ?

Как сделать безопасное межпотоковое изменение z-индекса PictureBox без зависания моей программы?

Заранее спасибо

1 Ответ

0 голосов
/ 20 ноября 2011

Простейшим способом было бы пропустить вызов, когда вы выполняете их все в цикле в конце:

foreach (CardPictureBox cardPB in Collection) 
{
    cardPB.BringToFront();
}
...