我正在制作一个Hangman Windows Forms应用程序,到目前为止它已经很好地发展了,逻辑在那里,但是我在GUI同步方面遇到了一个小问题。在更新我的GUI时遇到了一些问题
现在我显示来自GameForm.cs
这反过来实例化一个单独的线程名为GameRound
类的UI,现在的问题是怎么样的怪,游戏回合环路工程,问题是,它不更新UI元素(在这种情况下,显示hangman的picturebox,显示隐藏的单词的文本框和显示已猜测字符的标签),而不是在循环的每次迭代后更新。但是我注意到,如果我在循环中插入MessageBox.Show()
,那么当消息框被调用时它们将被更新。
我猜这是某种线程同步问题,在Gameround线程正在工作时窗体不想更新,或者其他什么,但我是一个完整的开发者程序员,所以我需要一些帮助!
下面的代码到游戏回合(Gameround.Start())
public void Start()
{
Hangman hangman = new Hangman();
do
{
//Check if hangman is dead first
if (hangman.HangmanStep == 6) {
MessageBox.Show("You got hanged! RIP");
complete = true; }
bool w_reduceSticks = new bool();
string output = WordBuilder.ObscureWord(word);
HangManBox.Image = Drawing.Drawer.DrawHangMan(hangman.HangmanStep);
WordBox.Text = output;
GuessedLetters.Text = ReturnGuessedLetters(incorrectGuesses);
MessageBox.Show("");
//After guessing check if we've guessed all letters in the word
if (CompareLists(word.dontObscure, word.letters.Distinct().ToList()))
{
System.Threading.Thread.Sleep(5000);
complete = true;
break;
}
Thread readKeyThread = new Thread(InitReadKeyForm);
readKeyThread.Start();
readKeyThread.Join();
if (ReadKeyForm.Key == 2) {
w_reduceSticks = GuessWord();
}
else {
w_reduceSticks = GuessLetters(ReadKeyForm.Key);
}
if (w_reduceSticks)
{
hangman.HangmanStep++;
}
} while (!complete);
由于'Thread.Sleep(2000);'后面的'break',你的代码的下半部分是不可访问的。但那是另一个问题。 –
对,这只是我调试一些东西,我会编辑。 –