Wydaje się, że Thread.Sleep nie jest obsługiwany w .NET dla aplikacji ze Sklepu Windows.
Na przykład this
System.Threading.Thread.Sleep(1000);
będzie kompilować, gdy jest przeznaczony dla dowolnej platformy .NET Framework (2.0, 3.5, 4.0, 4.5), ale nie w przypadku .NET dla aplikacji ze Sklepu Windows (lub w przenośnej bibliotece klas, która jest przeznaczona zarówno dla wersji 4.5, jak i sklepu).
System.Threading.Thread nadal istnieje, po prostu nie ma metody Sleep.
Muszę opóźnić coś o kilka sekund w mojej aplikacji, czy jest odpowiedni zamiennik?
EDYTUJ, dlaczego opóźnienie jest potrzebne: Moja aplikacja jest grą, a opóźnienie ma sprawić, że wygląda na to, że komputerowy przeciwnik „myśli” o swoim następnym ruchu. Metoda jest już wywoływana asynchronicznie (główny wątek nie jest blokowany), chcę tylko spowolnić czas odpowiedzi.
Monitor
zajęcia? Możesz użyć tejWait
metody z limitem czasu, aby symulować sen.Thread.Sleep
do śmietnika złej technologii.Odpowiedzi:
Aplikacje ze Sklepu Windows obsługują asynchroniczność - a „asynchroniczna pauza” jest zapewniana przez
Task.Delay
. Więc w ramach metody asynchronicznej napisałbyś:... lub jakiekolwiek opóźnienie, które chcesz. Metoda asynchroniczna będzie kontynuowana 30 sekund później, ale wątek nie zostanie zablokowany, tak jak w przypadku wszystkich
await
wyrażeń.źródło
.RunSynchronously()
razie potrzeby możesz przypiąć .Thread.Sleep
jest obsługiwany w .NET 3.5, więc pytanie nie ma zastosowania. Bez wątpienia masz to pytanie, ale nie wygląda to tak samo, jak ten. Przeczytajcie tinyurl.com/stack-hints, a następnie zadajcie nowe pytanie.Nienawidzę mówić tego, co oczywiste, ale na wypadek, gdyby ktoś chciał jednego wiersza
System.Threading.Tasks.Task.Delay(3000).Wait()
źródło
Po prostu miałem ten sam problem i znalazłem inne interesujące rozwiązanie, którym chciałem się z tobą podzielić. Jeśli naprawdę chcesz zablokować wątek, zrobiłbym to w ten sposób (dzięki @Brannon za "szczupłą" wskazówkę):
źródło
MainPage.xaml.cs
źródło
Nie ma prawie ŻADNEGO powodu (z wyjątkiem celów testowych), aby NIGDY używać
Thread.Sleep()
.JEŚLI (i tylko jeśli) masz bardzo dobry powód, aby wysłać wątek do uśpienia, możesz sprawdzić
Task.Delay()
, na który możesz poczekać, aby „poczekać” przez określony czas. Chociaż to nigdy nie jest dobry pomysł, żeby siedzieć i nic nie robić. Zła praktyka ...źródło