Сообщение за ограниченное время, thread.sleep(x) не работает - Windows Phone
Я хочу просто показать сообщение на короткое время в TextBlock. Я использую этот код
Label1.Text = "Wrong Password!";
System.Threading.Thread.Sleep(5000);
Label1.Text = " ";
Но это не работает, если у кого-то есть другая лучшая логика, тогда, пожалуйста, ответьте!
1 ответ
Решение
Приведенный выше код будет спать потоком пользовательского интерфейса, так что, по сути, происходит следующее:
- Запросить, чтобы текст метки был установлен на "Wrong Password!" (не обновляется до следующего тика UI)
- Спи 5 секунд
- Запросить, чтобы текст метки был установлен на ""
- Пометки в пользовательском интерфейсе, метка установлена на ""
Чтобы обойти это, сделайте что-то вроде:
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();
Это будет:
- Запросите, чтобы текст метки был установлен на "Wrong Password!"
- Начать другую тему, которая спит в течение 5000 мс
- Тем временем поток пользовательского интерфейса продолжает выполняться, поэтому метка обновляется до "Wrong Password!"
- 5000 мс проходит и фон запрашивает очистку текста метки
- поток пользовательского интерфейса помечает и обновляет метку