Сообщение за ограниченное время, thread.sleep(x) не работает - Windows Phone

Я хочу просто показать сообщение на короткое время в TextBlock. Я использую этот код

Label1.Text = "Wrong Password!";
System.Threading.Thread.Sleep(5000);
Label1.Text = " ";

Но это не работает, если у кого-то есть другая лучшая логика, тогда, пожалуйста, ответьте!

1 ответ

Решение

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

  1. Запросить, чтобы текст метки был установлен на "Wrong Password!" (не обновляется до следующего тика UI)
  2. Спи 5 секунд
  3. Запросить, чтобы текст метки был установлен на ""
  4. Пометки в пользовательском интерфейсе, метка установлена ​​на ""

Чтобы обойти это, сделайте что-то вроде:

Label1.Text = "Wrong Password!";

// start a new background thread
new Thread(new ThreadStart(() =>
{
    Thread.Sleep(5000);

    // interacting with Control properties must be done on the UI thread
    // use the Dispatcher to queue some code up to be run on the UI thread
    Dispatcher.BeginInvoke(() =>
    {
        Label1.Text = " ";
    });
})).Start();

Это будет:

  1. Запросите, чтобы текст метки был установлен на "Wrong Password!"
  2. Начать другую тему, которая спит в течение 5000 мс
  3. Тем временем поток пользовательского интерфейса продолжает выполняться, поэтому метка обновляется до "Wrong Password!"
  4. 5000 мс проходит и фон запрашивает очистку текста метки
  5. поток пользовательского интерфейса помечает и обновляет метку