Thread.Sleep , похоже, не поддерживается в .NET для приложений Магазина Windows.
Например, это
System.Threading.Thread.Sleep(1000);
будет компилироваться при нацеливании на любую .NET Framework (2.0, 3.5, 4.0, 4.5), но не при нацеливании на .NET для приложений Магазина Windows (или в переносимой библиотеке классов, ориентированной как на 4.5, так и на хранилище).
System.Threading.Thread все еще существует, просто у него нет метода Sleep.
Мне нужно отложить что-то на несколько секунд в моем приложении, есть ли подходящая замена?
ИЗМЕНИТЬ, почему необходима задержка: Мое приложение - это игра, и задержка должна создать впечатление, будто компьютерный противник «думает» о своем следующем шаге. Метод уже вызван асинхронно (основной поток не заблокирован), я просто хочу уменьшить время отклика.
Monitor
класс? Вы можете использоватьWait
метод с таймаутом для имитации сна.Thread.Sleep
на помойку плохих технологий.Ответы:
Приложения Магазина Windows поддерживают асинхронность - и «асинхронная пауза» обеспечивается
Task.Delay
. Итак, внутри асинхронного метода вы должны написать:... или как хотите отсрочку. Асинхронный метод будет продолжен через 30 секунд, но поток не будет заблокирован, как и для всех
await
выражений.источник
.RunSynchronously()
.Thread.Sleep
это поддерживается в .NET 3.5, так что вопрос не относится. Не сомневаюсь , что у вас есть на вопрос, но это не звучит , как будто это так же , как этот. Пожалуйста, прочтите tinyurl.com/stack-hints и задайте новый вопрос.Ненавижу утверждать очевидное, но на случай, если кто-то захочет одну строчку
System.Threading.Tasks.Task.Delay(3000).Wait()
источник
У меня была такая же проблема, и я нашел другое интересное решение, которым хотел с вами поделиться. Если вы действительно хотите заблокировать поток, я бы сделал это так (спасибо @Brannon за "тонкий" намек):
источник
MainPage.xaml.cs
источник
Практически НЕТ причин (кроме тестовых целей) для использования ВСЕГДА
Thread.Sleep()
.ЕСЛИ (и только если) у вас есть очень веская причина для отправки потока в спящий режим, вы можете захотеть проверить
Task.Delay()
, что вы можете ждать, чтобы «подождать» в течение определенного времени. Хотя никогда не стоит оставлять нить без дела и ничего не делать. Плохая практика ...источник