」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > WPF中延遲操作時如何避免UI凍結?

WPF中延遲操作時如何避免UI凍結?

發佈於2024-11-06
瀏覽:187

How to Avoid UI Freezing When Delaying Operations in WPF?

WPF 中的延遲操作

WPF 中的延遲操作對於增強用戶體驗和確保平滑過渡至關重要。常見的情況是在導航到新視窗之前添加延遲。

為了實現此目的,經常使用 Thread.Sleep,如提供的程式碼片段所示。但是,在延遲過程中,使用 Thread.Sleep 阻塞 UI 執行緒會導致 UI 無回應。這表現為在導航到下一頁之前短暫顯示「兩分鐘延遲」訊息。

要解決此限制,建議使用非同步技術,例如 DispatcherTimer、Task.Delay 或 async/await。

方法 1:使用 DispatcherTimer

DispatcherTimer 類別提供了一種在指定時間間隔後執行操作的方法。

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();
};

方法 2:使用 Task.Delay

Task.Delay 是一種傳回在指定延遲後完成的任務的方法。

tbkLabel.Text = "two seconds delay";

Task.Delay(2000).ContinueWith(_ =>
{
    var page = new Page2();
    page.Show();
});

方法3:使用Async/Await(需要.NET 4.5或更高版本)

Async/await語法提供了一種更優雅、更易讀取的方式來處理非同步操作。

public async void TheEnclosingMethod()
{
    tbkLabel.Text = "two seconds delay";

    await Task.Delay(2000);
    var page = new Page2();
    page.Show();
}

透過使用這些非同步技術,UI 執行緒保持回應,使用者在無縫轉換到新頁面之前的整個延遲期間都會看到「兩秒延遲」訊息。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3