Thread.Sleep ne semble pas être pris en charge dans les applications .NET pour Windows Store.
Par exemple, cela
System.Threading.Thread.Sleep(1000);
se compilera lorsqu’il cible tout .NET Framework (2.0, 3.5, 4.0, 4.5), mais pas lorsqu’il cible les applications .NET pour Windows Store (ou dans une bibliothèque de classes portable qui cible 4.5 et magasin).
System.Threading.Thread est toujours là, il n'a tout simplement pas la méthode Sleep.
Je dois retarder quelque chose dans mon application pendant quelques secondes. Existe-t-il un remplaçant adéquat?
EDITER pourquoi le délai est nécessaire: Mon application est un jeu et le délai consiste à donner l’impression que l’adversaire de l’ordinateur "pense" à son prochain coup. La méthode s'appelle déjà asynchrone (le thread principal n'est pas bloqué), je veux juste ralentir le temps de réponse.
Les applications du Windows Store sont asynchrones - et une "pause asynchrone" est fournie par Task.Delay
. Donc, dans une méthode asynchrone, vous écririez:
await Task.Delay(TimeSpan.FromSeconds(30));
... ou le délai que vous voulez. La méthode asynchrone continuera 30 secondes plus tard, mais le thread sera non bloqué, comme pour toutes les expressions await
.
Déteste dire ce qui est évident, mais au cas où quelqu'un voudrait une seule ligne System.Threading.Tasks.Task.Delay(3000).Wait()
Je viens d'avoir le même problème et j'ai trouvé une autre solution intéressante que je voulais partager avec vous. Si vous voulez vraiment bloquer le fil, je le ferais comme ceci (merci à @Brannon pour l'indicateur "slim"):
// `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!
}