Нитка.Замена сна in.NET для магазина Windows
нить.Спи не поддерживается в .NET для приложений Магазина Windows.
например,
System.Threading.Thread.Sleep(1000);
будет компилироваться при таргетинге на любую платформу .NET Framework (2.0, 3.5, 4.0, 4.5), но не при таргетинге .NET для приложений Магазина Windows (или в портативной библиотеке классов, предназначенной как для 4.5, так и для магазина).
5 ответов:
приложения Магазина Windows охватывают асинхронность - и "асинхронная пауза" обеспечивается
Task.Delay
. Поэтому в асинхронном методе вы должны написать:await Task.Delay(TimeSpan.FromSeconds(30));
... или любую задержку, которую вы хотите. Асинхронный метод будет продолжаться 30 секунд спустя, но поток будет не блокируется, как и для всех
await
выражения.
ненавижу констатировать очевидное, но в случае если кто-то хотел одну строку
System.Threading.Tasks.Task.Delay(3000).Wait()
Я просто имел ту же проблему и нашел еще одно интересное решение, которое я хотел бы поделиться с вами. Если вы действительно хотите заблокировать поток, я бы сделал это так (Спасибо @Brannon за" тонкий " намек):
// `waitHandle.Set` is never called, so we wait always until the timeout occurs using (var waitHandle = new ManualResetEventSlim(initialState: false)) { waitHandle.Wait(TimeSpan.FromSeconds(5)); }
файл MainPage.код XAML.cs
public MainPage() { this.InitializeComponent(); this.WaitForFiveSeconds(); } private async void WaitForFiveSeconds() { await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(5)); // do something after 5 seconds! }
там почти нет причин (за исключением целей тестирования), чтобы когда-либо использовать
Thread.Sleep()
.если (и только если) у вас есть очень хорошая причина, чтобы отправить поток в спящий режим, вы можете проверить
Task.Delay()
, который вы можете ждать ,чтобы" ждать " в течение указанного времени. Хотя это никогда не хорошая идея, чтобы нить сидела и ничего не делала. Плохая практика ...