Thread.Sleep scheint in .NET für Windows Store-Apps nicht unterstützt zu werden.
Zum Beispiel dies
System.Threading.Thread.Sleep(1000);
Kompiliert beim Targeting von .NET Framework (2.0, 3.5, 4.0, 4.5), jedoch nicht beim Targeting von .NET für Windows Store-Apps (oder in einer tragbaren Klassenbibliothek, die sowohl auf 4.5 als auch auf Store abzielt).
System.Threading.Thread ist immer noch vorhanden, es gibt nur nicht die Sleep-Methode.
Ich muss etwas in meiner App um einige Sekunden verzögern. Gibt es einen geeigneten Ersatz?
BEARBEITEN Sie, warum die Verzögerung benötigt wird: Meine App ist ein Spiel und die Verzögerung soll es so aussehen lassen, als würde der Computergegner über seinen nächsten Zug "nachdenken". Die Methode wird bereits asynchron aufgerufen (Hauptthread ist nicht blockiert), ich möchte nur die Antwortzeit verlangsamen.
Monitor
Klasse? Sie können dieWait
Methode mit einer Zeitüberschreitung verwenden, um einen Schlaf zu simulieren.Thread.Sleep
in den Mülleimer der schlechten Technik.Antworten:
Windows Store-Apps unterstützen Asynchronität - und eine "asynchrone Pause" wird von bereitgestellt
Task.Delay
. Innerhalb einer asynchronen Methode würden Sie also schreiben:... oder was auch immer Sie wollen. Die asynchrone Methode wird 30 Sekunden später fortgesetzt, aber der Thread wird nicht wie bei allen
await
Ausdrücken blockiert .quelle
.RunSynchronously()
bei Bedarf anheften .Thread.Sleep
wird in .NET 3.5 unterstützt, daher trifft die Frage nicht zu. Zweifellos haben Sie eine Frage, aber es hört sich nicht so an, als wäre es dieselbe wie diese. Bitte lesen Sie tinyurl.com/stack-hints und stellen Sie eine neue Frage.Ich hasse es, das Offensichtliche zu sagen, aber falls jemand eine einzige Zeile wollte
System.Threading.Tasks.Task.Delay(3000).Wait()
quelle
Ich hatte gerade das gleiche Problem und fand eine andere interessante Lösung, die ich mit Ihnen teilen wollte. Wenn du den Thread wirklich blockieren willst, würde ich es so machen (danke @Brannon für den "schlanken" Hinweis):
quelle
MainPage.xaml.cs
quelle
Es gibt fast keinen Grund (außer zu Testzwecken) für die Verwendung
Thread.Sleep()
.WENN (und nur wenn) Sie einen sehr guten Grund haben, einen Thread in den Ruhezustand zu versenden, möchten Sie möglicherweise überprüfen
Task.Delay()
, auf welchen Sie warten können, um eine bestimmte Zeit zu "warten". Obwohl es nie eine gute Idee ist, einen Faden herumzusitzen und nichts zu tun. Schlechte Praxis ...quelle