Thread.Sleep sepertinya tidak didukung di .NET untuk aplikasi Windows Store.
Misalnya, ini
System.Threading.Thread.Sleep(1000);
akan dikompilasi saat menargetkan .NET Framework (2.0, 3.5, 4.0, 4.5), tetapi tidak saat menargetkan .NET untuk aplikasi Windows Store (atau di pustaka kelas portabel yang menargetkan 4.5 dan penyimpanan).
System.Threading.Thread masih ada, hanya saja tidak ada metode Sleep.
Saya perlu menunda sesuatu selama beberapa detik di aplikasi saya, apakah ada pengganti yang cocok?
EDIT mengapa penundaan itu diperlukan: Aplikasi saya adalah sebuah permainan dan penundaan itu adalah untuk membuatnya tampak seperti komputer lawan sedang "memikirkan" tentang langkah selanjutnya. Metode ini sudah dipanggil secara asinkron (utas utama tidak diblokir), saya hanya ingin memperlambat waktu respons.
Monitor
kelas? Anda dapat menggunakanWait
metode dengan waktu tunggu untuk mensimulasikan tidur.Thread.Sleep
ke tong sampah teknologi buruk.Jawaban:
Aplikasi Windows Store menggunakan asynchrony - dan "asynchronous pause" disediakan oleh
Task.Delay
. Jadi dalam metode asinkron, Anda akan menulis:... atau penundaan apa pun yang Anda inginkan. Metode asinkron akan berlanjut 30 detik kemudian, tetapi utas tidak akan diblokir, seperti untuk semua
await
ekspresi.sumber
.RunSynchronously()
jika perlu.Thread.Sleep
ini didukung dalam NET 3.5, jadi pertanyaannya tidak berlaku. Tidak ada keraguan Anda memiliki sebuah pertanyaan, tetapi tidak terdengar seperti itu sama seperti yang satu ini. Silakan baca tinyurl.com/stack-hints kemudian ajukan pertanyaan baru.Benci untuk menyatakan hal yang sudah jelas tetapi jika ada yang menginginkan satu baris
System.Threading.Tasks.Task.Delay(3000).Wait()
sumber
Saya baru saja mengalami masalah yang sama dan menemukan solusi menarik lainnya yang ingin saya bagikan kepada Anda. Jika Anda benar-benar ingin memblokir utas, saya akan melakukannya seperti ini (terima kasih @Brannon untuk petunjuk "ramping"):
sumber
MainPage.xaml.cs
sumber
Hampir TIDAK ADA alasan (kecuali untuk tujuan pengujian) untuk PERNAH digunakan
Thread.Sleep()
.JIKA (dan hanya jika) Anda memiliki alasan yang sangat bagus untuk mengirim utas ke mode tidur, Anda mungkin ingin memeriksa
Task.Delay()
, yang dapat Anda tunggu untuk "menunggu" selama waktu tertentu. Meskipun bukan ide yang baik untuk memiliki utas yang duduk-duduk dan tidak melakukan apa pun. Praktik buruk ...sumber