Wie kann ich einem Programm in C # eine Verzögerung hinzufügen?
Wie kann ich einem Programm in C # eine Verzögerung hinzufügen?
Antworten:
Sie könnten eine Thread.Sleep()
Funktion verwenden, z
int milliseconds = 2000;
Thread.Sleep(milliseconds);
dass vollständig stoppt die Ausführung des aktuellen Threads für 2 Sekunden.
Das wahrscheinlich am besten geeignete Szenario Thread.Sleep
ist, wenn Sie die Vorgänge in einem anderen Thread verzögern möchten, anders als im Hauptszenario, z. B.:
MAIN THREAD --------------------------------------------------------->
(UI, CONSOLE ETC.) | |
| |
OTHER THREAD ----- ADD A DELAY (Thread.Sleep) ------>
Für andere Szenarien (z. B. Starten des Betriebs nach einiger Zeit usw.) überprüfen Sie Codys Antwort .
await Task.Delay(milliseconds)
. Das hat bei mir funktioniert :)
Verwenden Sie einen Timer mit einem Intervall von 2 bis 3 Sekunden.
Sie haben drei verschiedene Optionen zur Auswahl, je nachdem, welche Art von Anwendung Sie schreiben:
Nicht verwenden, Thread.Sleep
wenn Ihre Anwendung Eingaben in diesem Thread gleichzeitig verarbeiten muss (WinForms, WPF), da dies Sleep
den Thread vollständig blockiert und verhindert, dass er andere Nachrichten verarbeitet. Unter der Annahme einer Single-Threaded-Anwendung (wie die meisten) reagiert Ihre gesamte Anwendung nicht mehr, anstatt nur einen Vorgang zu verzögern, wie Sie es wahrscheinlich beabsichtigt haben. Beachten Sie, dass es möglicherweise in Ordnung ist, Sleep in einer reinen Konsolenanwendung zu verwenden, da keine "Ereignisse" zu behandeln sind oder sich in einem separaten Thread befinden (dies ist auch Task.Delay
eine bessere Option).
Zusätzlich zu Timern und Sleep
Sie können Task.Delay
die asynchrone Version verwenden Sleep
, die den Thread nicht daran hindert, Ereignisse zu verarbeiten (wenn sie richtig verwendet werden - verwandeln Sie sie nicht in unendlichen Schlaf mit .Wait()
).
public async void ClickHandler(...)
{
// whatever you need to do before delay goes here
await Task.Delay(2000);
// whatever you need to do after delay.
}
Dasselbe await Task.Delay(2000)
kann in einer Main
Methode einer Konsolenanwendung verwendet werden, wenn Sie C # 7.1 ( Async main in MSDN-Blogs ) verwenden.
Hinweis: Das Verzögern des Betriebs mit Sleep
hat den Vorteil, dass Rennbedingungen vermieden werden, die sich aus dem potenziellen Starten mehrerer Vorgänge mit Zeitgebern ergeben Delay
. Leider ist das Einfrieren der UI-basierten Anwendung nicht akzeptabel. Sie müssen daher überlegen, was passieren wird, wenn Sie mehrere Verzögerungen starten (dh wenn sie durch einen Klick auf eine Schaltfläche ausgelöst werden). Deaktivieren Sie diese Schaltfläche oder brechen Sie den Timer / die Aufgabe ab oder stellen Sie sicher, dass sie verzögert ist Der Betrieb kann mehrmals sicher durchgeführt werden.
Thread.Sleep
Warnung möglicherweise nicht so wichtig.
await Task.Delay()
Version und Inline - Kommentar , dass Konsolenanwendung tatsächlich wahrscheinlich wollen zu verwenden Sleep
(non-async Main
) oder Delay
(async Main
)
Für 2,3 Sekunden sollten Sie Folgendes tun:
System.Threading.Thread.Sleep(2300);
System.Threading.Thread.Sleep(
(int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);
Oder mit using
Aussagen:
Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);
Ich bevorzuge dies 1000 * numSeconds
(oder einfach 3000
), weil es offensichtlicher macht, was mit jemandem los ist, der es noch nicht benutzt Thread.Sleep
hat. Es dokumentiert besser Ihre Absicht.
Thread.Sleep(TimeSpan)
direkt verwenden, ohne in einen Int umwandeln zu müssen.