2011-12-14 3 views
2

Я только начинаю с мира программирования C# и столкнулся с небольшим сбоем в моем коде, который заставляет проект разрушаться.Отображение сообщений слишком рано - 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"); 

    } 
+0

Итак, что произойдет, если вы закомментируете MessageBox? – IAbstract

+0

Текст обновляется, когда отображается окно сообщения или после его закрытия? –

+0

Это связано с тем, что у телефона нет возможности обновить его экран до тех пор, пока функция Draw() не будет завершена. Вам нужно будет позвонить переписке или что-то еще до отображения окна сообщения. Извините, я не могу точно сказать, что я еще не закодировал для телефона Windows. Я уверен, что кто-то еще скоро появится с дополнительной информацией;) –

ответ

6

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

Простое решения задержать выполнение Вашего MessageBox:

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

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

+0

Большое спасибо, работает так, как ожидалось! – Quazum