WPF を使用する場合、多くの場合、続行する前に指定した期間操作を遅らせる必要があります。 Thread.Sleep などのスレッド ブロックのアプローチを使用すると、UI スレッドがフリーズするため、望ましくない動作が発生する可能性があります。代わりに、UI の応答性を維持しながら遅延を実現するには、非同期メソッドを使用する必要があります。
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>
では、Task.Delay メソッドを使用できます。引数としてタイムスパンを受け取り、指定された遅延後に完了するタスクを返します。タスクが完了すると、必要なアクションを実行できます。
<code class="csharp">tbkLabel.Text = "two seconds delay"; Task.Delay(2000).ContinueWith(_ => { var page = new Page2(); page.Show(); });</code>
.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 サイトの他の関連記事を参照してください。