Thread.Sleep ne semble pas être pris en charge dans les applications .NET pour Windows Store.
Par exemple, ce
System.Threading.Thread.Sleep(1000);
compilera lors du ciblage de tout .NET Framework (2.0, 3.5, 4.0, 4.5), mais pas lors du ciblage de .NET pour les applications du Windows Store (ou dans une bibliothèque de classes portable qui cible à la fois 4.5 et store).
System.Threading.Thread est toujours là, il n'a tout simplement pas la méthode Sleep.
J'ai besoin de retarder quelque chose de quelques secondes dans mon application, existe-t-il un remplacement approprié?
MODIFIEZ pourquoi le délai est nécessaire: Mon application est un jeu et le délai consiste à donner l'impression que l'adversaire informatique "pense" à son prochain coup. La méthode est déjà appelée de manière asynchrone (le thread principal n'est pas bloqué), je veux juste ralentir le temps de réponse.
Monitor
classe? Vous pouvez utiliser laWait
méthode avec un délai d'expiration pour simuler un sommeil.Thread.Sleep
à la poubelle de la mauvaise technologie.Réponses:
Les applications du Windows Store adoptent l’asynchronie - et une «pause asynchrone» est fournie par
Task.Delay
. Donc, dans une méthode asynchrone, vous écririez:... ou quel que soit le délai souhaité. La méthode asynchrone continuera 30 secondes plus tard, mais le thread ne sera pas bloqué, comme pour toutes les
await
expressions.la source
.RunSynchronously()
si nécessaire.Thread.Sleep
est pris en charge dans .NET 3.5, donc la question ne s'applique pas. Vous avez sans doute une question, mais il ne semble pas que ce soit la même chose que celle-ci. Veuillez lire tinyurl.com/stack-hints puis poser une nouvelle question.Je déteste énoncer l'évidence mais au cas où quelqu'un voudrait une seule ligne
System.Threading.Tasks.Task.Delay(3000).Wait()
la source
J'ai juste eu 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 ça (merci @Brannon pour l'astuce "slim"):
la source
MainPage.xaml.cs
la source
Il n'y a presque AUCUNE raison (sauf à des fins de test) de JAMAIS utiliser
Thread.Sleep()
.SI (et seulement si) vous avez une très bonne raison d'envoyer un thread en veille, vous voudrez peut-être vérifier
Task.Delay()
, ce que vous pouvez attendre pour "attendre" pendant un temps spécifié. Bien que ce ne soit jamais une bonne idée d'avoir un fil assis et de ne rien faire. Mauvaise pratique ...la source