Bagaimana saya bisa menambahkan penundaan ke program di C #?
Bagaimana saya bisa menambahkan penundaan ke program di C #?
Jawaban:
Anda dapat menggunakan Thread.Sleep()
fungsi, mis
int milliseconds = 2000;
Thread.Sleep(milliseconds);
yang sepenuhnya menghentikan eksekusi utas saat ini selama 2 detik.
Mungkin skenario yang paling tepat untuk Thread.Sleep
adalah ketika Anda ingin menunda operasi di utas lain, berbeda dari utama misalnya:
MAIN THREAD --------------------------------------------------------->
(UI, CONSOLE ETC.) | |
| |
OTHER THREAD ----- ADD A DELAY (Thread.Sleep) ------>
Untuk skenario lain (mis. Memulai operasi setelah beberapa waktu dll.) Periksa jawaban Cody .
await Task.Delay(milliseconds)
. Ini bekerja untuk saya :)
Gunakan timer dengan interval yang diatur ke 2–3 detik.
Anda memiliki tiga opsi berbeda untuk dipilih, tergantung pada jenis aplikasi yang Anda tulis:
Jangan gunakan Thread.Sleep
jika aplikasi Anda perlu memproses input apa pun pada utas itu secara bersamaan (WinForms, WPF), karena Sleep
akan sepenuhnya mengunci utas dan mencegahnya memproses pesan lainnya. Dengan asumsi aplikasi single-threaded (seperti kebanyakan), seluruh aplikasi Anda akan berhenti merespons, bukan hanya menunda operasi seperti yang mungkin Anda maksudkan. Perhatikan bahwa mungkin baik-baik saja untuk menggunakan Sleep di aplikasi konsol murni karena tidak ada "acara" untuk menangani atau pada utas terpisah (juga Task.Delay
merupakan pilihan yang lebih baik).
Selain penghitung waktu dan Sleep
Anda dapat menggunakan Task.Delay
versi asinkron Sleep
yang tidak memblokir utas dari pemrosesan acara (jika digunakan dengan benar - jangan mengubahnya menjadi tidur tanpa batas dengan .Wait()
).
public async void ClickHandler(...)
{
// whatever you need to do before delay goes here
await Task.Delay(2000);
// whatever you need to do after delay.
}
Hal yang sama await Task.Delay(2000)
dapat digunakan dalam Main
metode aplikasi konsol jika Anda menggunakan C # 7.1 ( utama Async di blog MSDN ).
Catatan: menunda operasi dengan Sleep
manfaat menghindari kondisi balapan yang berasal dari kemungkinan memulai beberapa operasi dengan timer / Delay
. Sayangnya pembekuan aplikasi berbasis UI tidak dapat diterima sehingga Anda perlu memikirkan apa yang akan terjadi jika Anda memulai beberapa penundaan (yaitu jika dipicu oleh klik tombol) - pertimbangkan untuk menonaktifkan tombol tersebut, atau membatalkan timer / tugas atau memastikan tertunda operasi dapat dilakukan beberapa kali dengan aman.
Thread.Sleep
peringatan itu mungkin tidak sepenting itu.
await Task.Delay()
komentar versi dan inline bahwa aplikasi konsol sebenarnya mungkin ingin menggunakan Sleep
(non-async Main
) atau Delay
(async Main
)
Untuk 2,3 detik yang harus Anda lakukan:
System.Threading.Thread.Sleep(2300);
System.Threading.Thread.Sleep(
(int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);
Atau dengan using
pernyataan:
Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);
Saya lebih suka ini 1000 * numSeconds
(atau hanya 3000
) karena membuatnya lebih jelas apa yang terjadi pada seseorang yang belum pernah menggunakan Thread.Sleep
sebelumnya. Lebih baik mendokumentasikan niat Anda.
Thread.Sleep(TimeSpan)
secara langsung, tanpa harus menggunakan int.