Thread.Sleep() ohne einfrieren der UI
First off, ich bin ein Anfänger in C#
und ich möchte diese:
class2.method_79(null, RoomItem_0, num, num2, 0, false, true, true);
System.Threading.Thread.Sleep(250);
class2.method_79(null, RoomItem_0, num, num4, 0, false, true, true);
System.Threading.Thread.Sleep(300);
class2.method_79(null, RoomItem_0, num, num6, 0, false, true, true);
Aber diese Lösung friert das UI, wie konnte ich das zweite Ereignis auftreten, 250ms nach dem ersten etc ohne einfrieren der UI?
- Nachschlagen Multithreading.
- Blockieren Sie nicht den UI-thread. Einen Arbeiter-thread mit einem schlafen. (Beachten Sie, dass Sie auch besser verwenden Sie so etwas wie ein timer). Bitte Lesen Sie diese stackoverflow.com/a/11576659/296526 inklusive link in die Antwort.
- Man könnte auch die Methode
async
und verwendenawait Task.Delay(250)
. - mögliche Duplikate von Threading in c#
- Schließlich habe ich benutzt, die asynchrone Methode mit await task.Verzögerung funktioniert perfekt, danke!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg, um zu schlafen, ohne zu frieren den UI-thread zu machen, ist Ihre Methode asynchron. Um Ihre Methode asynchrone fügen Sie die async modifier.
zu
Nun können Sie die erwarten operator zum ausführen asynchroner Aufgaben, in Ihrem Fall.
Dies macht es zu einem asynchrone Methode und wird asynchron ausgeführt von Ihrem UI-Faden.
Beachten Sie, dass dies nur unterstützt von Microsoft .NET framework 4.5 und höher.
.
Könnte man eine Dispatcher-Timer die Zeit Ihrer Ausführung von Methoden..
Sind Sie in der UI-thread beim Aufruf
.Sleep();
.Das ist, warum es zum einfrieren der UI. Wenn Sie brauchen, um dies zu tun, ohne das einfrieren der Benutzeroberfläche, die Sie benötigen würden, um den code auszuführen, der in unterschiedlichen threads.
Führen Sie Ihre zeitaufwendigen Aufgaben auf den separaten thread. Vermeiden Sie zeitraubende Aufgaben und
Thread.Sleep()
auf UI-thread.Versuchen, diesen code