„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie vermeide ich ein Einfrieren der Benutzeroberfläche, wenn Vorgänge in WPF verzögert werden?

Wie vermeide ich ein Einfrieren der Benutzeroberfläche, wenn Vorgänge in WPF verzögert werden?

Veröffentlicht am 06.11.2024
Durchsuche:960

How to Avoid UI Freezing When Delaying Operations in WPF?

Verzögern von Vorgängen in WPF

Das Verzögern eines Vorgangs in WPF ist wichtig, um die Benutzererfahrung zu verbessern und reibungslose Übergänge sicherzustellen. Ein häufiges Szenario ist das Hinzufügen einer Verzögerung vor dem Navigieren zu einem neuen Fenster.

Um dies zu erreichen, wird häufig Thread.Sleep verwendet, wie im bereitgestellten Codeausschnitt gezeigt. Das Blockieren des UI-Threads mit Thread.Sleep führt jedoch dazu, dass die Benutzeroberfläche während der Verzögerung nicht reagiert. Dies äußert sich in einer kurzen Anzeige der Meldung „zwei Minuten Verzögerung“, bevor zur nächsten Seite navigiert wird.

Um diese Einschränkung zu beheben, wird empfohlen, asynchrone Techniken wie DispatcherTimer, Task.Delay oder async/await zu verwenden.

Methode 1: Verwenden eines DispatcherTimers

Die DispatcherTimer-Klasse bietet eine Möglichkeit, eine Aktion nach einem angegebenen Intervall auszuführen.

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();
};

Methode 2: Task.Delay verwenden

Task.Delay ist eine Methode, die eine Aufgabe zurückgibt, die nach einer angegebenen Verzögerung abgeschlossen wird.

tbkLabel.Text = "two seconds delay";

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

Methode 3: Verwendung von Async/Await (erfordert .NET 4.5 oder höher)

Die Async/await-Syntax bietet eine elegantere und lesbarere Möglichkeit, mit Asynchronität umzugehen Operationen.

public async void TheEnclosingMethod()
{
    tbkLabel.Text = "two seconds delay";

    await Task.Delay(2000);
    var page = new Page2();
    page.Show();
}

Durch die Verwendung dieser asynchronen Techniken bleibt der UI-Thread reaktionsfähig und der Benutzer sieht die Meldung „Zwei Sekunden Verzögerung“ für den gesamten Verzögerungszeitraum, bevor er nahtlos zur neuen Seite übergeht.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3