ホームページ  >  記事  >  バックエンド開発  >  UI をフリーズさせずに WPF で時間遅延を実現するにはどうすればよいですか?

UI をフリーズさせずに WPF で時間遅延を実現するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 11:09:02342ブラウズ

How to Achieve Time Delays in WPF Without Freezing the UI?

WPF での時間遅延の実現

WPF を使用する場合、多くの場合、続行する前に指定した期間操作を遅らせる必要があります。 Thread.Sleep などのスレッド ブロックのアプローチを使用すると、UI スレッドがフリーズするため、望ましくない動作が発生する可能性があります。代わりに、UI の応答性を維持しながら遅延を実現するには、非同期メソッドを使用する必要があります。

方法 1: DispatcherTimer を使用する

1 つの方法では、DispatcherTimer を使用します。ここでは、タイマーが特定の間隔 (たとえば、2 秒) で開始されます。タイマーが鳴ると遅延が完了し、目的のアクション (次のウィンドウへのナビゲーションなど) を実行できます。

<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>

方法 2: Task.Delay を使用する

では、Task.Delay メソッドを使用できます。引数としてタイムスパンを受け取り、指定された遅延後に完了するタスクを返します。タスクが完了すると、必要なアクションを実行できます。

<code class="csharp">tbkLabel.Text = "two seconds delay";

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

方法 3: async/await を利用する (.NET 4.5 以降の場合)

.NET 4.5 以降のバージョンでは、 async/await パターンは、遅延を実装する洗練された方法を提供します。メソッドを非同期としてマークすると、await キーワードを使用して遅延を実現できます。コードの実行は遅延が完了するまで一時停止し、その後、後続のアクションが実行されます。

<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>

これらの非同期アプローチを採用することで、UI の応答性を維持し、スレッドを回避しながら、WPF アプリケーションに効果的に遅延を導入できます。問題をブロックしています。

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

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