Apabila bekerja dengan WPF, selalunya perlu menangguhkan operasi untuk tempoh tertentu sebelum meneruskan. Menggunakan pendekatan menyekat benang seperti Thread.Sleep boleh menyebabkan tingkah laku yang tidak diingini, kerana ia membekukan urutan UI. Sebaliknya, kaedah tak segerak harus digunakan untuk mencapai kelewatan sambil mengekalkan responsif UI.
Satu pendekatan melibatkan penggunaan DispatcherTimer. Di sini, pemasa dimulakan dengan selang waktu tertentu (mis., dua saat). Apabila pemasa berdetik, kelewatan selesai dan tindakan yang diingini (cth., navigasi ke tetingkap seterusnya) boleh dilakukan.
<code class="csharp">tbkLabel.Text = "two seconds delay"; var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(2) }; timer.Start(); timer.Tick += (sender, args) => { timer.Stop(); var page = new Page2(); page.Show(); };</code>
Sebagai alternatif , kaedah Task.Delay boleh digunakan. Ia mengambil tempoh masa sebagai hujah dan mengembalikan tugasan yang selesai selepas kelewatan yang ditentukan. Apabila tugasan selesai, tindakan yang diingini boleh dilaksanakan.
<code class="csharp">tbkLabel.Text = "two seconds delay"; Task.Delay(2000).ContinueWith(_ => { var page = new Page2(); page.Show(); });</code>
Dalam .NET 4.5 dan versi seterusnya, corak async/wait menyediakan cara yang elegan untuk melaksanakan kelewatan. Dengan menandakan kaedah sebagai tidak segerak, kelewatan boleh dicapai menggunakan kata kunci tunggu. Pelaksanaan kod akan dijeda sehingga kelewatan selesai, dan kemudian tindakan seterusnya akan dilaksanakan.
<code class="csharp">// Ensure the method is marked as async public async void TheEnclosingMethod() { tbkLabel.Text = "two seconds delay"; await Task.Delay(2000); var page = new Page2(); page.Show(); }</code>
Dengan menggunakan pendekatan tak segerak ini, anda boleh memperkenalkan kelewatan dalam aplikasi WPF anda dengan berkesan sambil mengekalkan responsif UI dan mengelakkan urutan isu menyekat.
Atas ialah kandungan terperinci Bagaimana untuk Mencapai Kelewatan Masa dalam WPF Tanpa Membekukan UI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!