ホームページ > バックエンド開発 > C++ > WPF で操作を遅延するときに UI のフリーズを回避するにはどうすればよいですか?

WPF で操作を遅延するときに UI のフリーズを回避するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-02 05:56:30
オリジナル
480 人が閲覧しました

How to Avoid UI Freezing When Delaying Operations in WPF?

WPF での操作の遅延

WPF での操作の遅延は、ユーザー エクスペリエンスを向上させ、スムーズな移行を確保するために不可欠です。一般的なシナリオの 1 つは、新しいウィンドウに移動する前に遅延を追加することです。

これを実現するには、提供されたコード スニペットに示すように、Thread.Sleep がよく使用されます。ただし、Thread.Sleep で UI スレッドをブロックすると、遅延の進行中に UI が応答しなくなります。これは、次のページに移動する前に「2 分の遅延」というメッセージが簡単に表示されます。

この制限に対処するには、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 スレッドは応答性を維持し、新しいページにシームレスに移行する前に、遅延期間全体にわたって「2 秒の遅延」メッセージがユーザーに表示されます。

以上がWPF で操作を遅延するときに UI のフリーズを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート