ホームページ  >  記事  >  バックエンド開発  >  UI をブロックせずに WPF 操作に遅延を導入するにはどうすればよいですか?

UI をブロックせずに WPF 操作に遅延を導入するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-04 02:18:01126ブラウズ

How to Introduce Delays in WPF Operations Without Blocking the UI?

WPF 操作での遅延の紹介

後続のウィンドウに移動する前に遅延を実装するという目的は、WPF のいくつかのアプローチで達成できます。

問題の概要:

移動前に Thread.Sleep を使用してスレッドを一時停止すると、UI がブロックされ、ナビゲーションが行われる前に UI 要素が一時的に表示されます。

解決策:

スレッドのブロックを回避するには、ディスパッチャー タイマーや Task.Delay などの非同期待機テクニックを利用する必要があります。

方法 1 : DispatcherTimer

2 秒間隔のタイマーを作成し、間隔が経過したときにタイマーを停止して 2 番目のページを表示する Tick イベント ハンドラーを追加します。

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 を使用して非同期操作を 2 秒間一時停止し、次のページを表示します:

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 をブロックせずに WPF 操作に遅延を導入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。