Wenn Sie versuchen, vor der Ausführung eines Vorgangs in WPF eine Verzögerung einzuführen, ist es wichtig, die Verwendung von Thread.Sleep als solchen zu vermeiden Der Ansatz blockiert den UI-Thread und kann zu nicht reagierenden Benutzeroberflächen führen. Erwägen Sie stattdessen die Nutzung asynchroner Programmiertechniken.
Eine Möglichkeit ist die Verwendung eines DispatcherTimers. Dieser Timer läuft auf dem UI-Thread und ruft seinen Tick-Ereignishandler nach einem bestimmten Intervall auf:
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(); };
Ein anderer Ansatz beinhaltet die Verwendung von Task.Delay:
tbkLabel.Text = "two seconds delay"; Task.Delay(2000).ContinueWith(_ => { var page = new Page2(); page.Show(); });
Hier erstellt das Programm eine Aufgabe, die nach einer Verzögerung von 2 Sekunden abgeschlossen wird, und ruft dann den Fortsetzungsdelegaten auf, um die neue Seite anzuzeigen.
Schließlich bietet das Async/Await-Muster für Projekte, die auf .NET 4.5 oder höher abzielen, eine prägnante und bequeme Möglichkeit, mit Verzögerungen umzugehen:
public async void TheEnclosingMethod() { tbkLabel.Text = "two seconds delay"; await Task.Delay(2000); var page = new Page2(); page.Show(); }
Durch die Nutzung asynchroner Techniken können Entwickler Verzögerungen einführen WPF-Vorgänge ohne Beeinträchtigung der Reaktionsfähigkeit der Benutzeroberfläche.
Das obige ist der detaillierte Inhalt vonWie kann man Verzögerungen bei WPF-Vorgängen einführen, ohne den UI-Thread zu blockieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!