Окно сообщения отображается слишком рано - C # - PullRequest
2 голосов
/ 14 декабря 2011

Я только начинаю с мира программирования на C # и столкнулся с небольшим затруднением в моем коде, которое приводит к разрушению дизайна.

По некоторым причинам, когда я пытаюсь изменить текст в текстовом поле, он не изменяется визуально, пока не отобразится окно сообщения, которое находится под кодом для изменения текста.Я программирую для WP7, если что-то изменилось.Он запускается по нажатию кнопки.

Ниже мой код:

 private void Draw()
    {
        Random random = new Random((int)DateTime.Now.Ticks);

        number[0] = random.Next(0, 9);
        number[1] = random.Next(0, 9);
        number[2] = random.Next(0, 9);

            no1.Text = number[0].ToString();
            no2.Text = number[1].ToString();
            no3.Text = number[2].ToString();

        MessageBox.show("Example message");

    }

1 Ответ

6 голосов
/ 14 декабря 2011

Как отметил Рассел Тройвест, ваш код выполняется в потоке пользовательского интерфейса, том же самом потоке, который отвечает за обновление графического интерфейса. Поэтому визуальное представление текстового поля не будет обновлено, пока ваша функция не закроется.

Простое решение - отложить выполнение вашего сообщения:

this.Dispatcher.BeginInvoke(() => MessageBox.show("Example message"));

Таким образом, ваш метод draw завершится без отображения окна сообщения, затем поток пользовательского интерфейса отобразит его, как только завершит обновление интерфейса.

...