Warten Sie eine Weile, ohne zu blockieren den Haupt-thread
Ich wünschte, meine Methode warten über 500 ms und dann prüfen, ob einige-flag sich geändert hat. Wie diese, ohne zu blockieren den rest meiner Anwendung?
- Die Frage ist, tief underspecified; wir müssen wissen, was "der rest der Anwendung" ist-ist es auf dem gleichen thread, anderen threads, eine andere Maschine, was? Das heißt, fast alle Antworten bisher sind gefährlich. Entweder mithilfe von DoEvents oder Thread.Schlafen am schlimmsten sind Praktiken, die angeben, dass eine schlecht konzipierte Anwendung in Gefahr, böse re-entrancy bugs. Tudor ' s Antwort ist die beste: verwenden Sie einen timer.
- Darüber hinaus sollten Sie untersuchen die Async CTP version von C# 5. Wir haben Hinzugefügt, Ablaufsteuerung, können Sie sehr leicht Verzögerung von 500 Millisekunden und abholen, wo Sie aufgehört haben, ohne zu blockieren alle threads oder der Inbetriebnahme von neuen message-loops.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Thread.Sleep(500)
zu zwingen, den aktuellen thread warten 500ms. Es funktioniert, aber es ist nicht, was Sie wollen, wenn Sie Ihre gesamte Anwendung läuft in einem thread.In diesem Fall, werden Sie wollen, zu einem
Timer
etwa so:Können Sie festlegen
AutoReset
auf true (oder nicht bei allen), wenn Sie möchten, dass der timer sich zu wiederholen.Interval
Eigenschaft hat einen Wert in Millisekunden, nicht Sekunden, linkThread.Sleep
Ursachen Haupt-thread schlafen.Können Sie
await Task.Delay(500);
ohne die Blockierung der thread wieSleep
tut, und mit viel weniger code als ein Timer.Verstehe ich nicht wirklich die Frage.
Wenn Sie möchten, um zu blockieren, bevor Sie überprüfen, nutzen
Thread.Sleep(500);
Wenn Sie möchten, um zu überprüfen, asynchron alle x Sekunden verwenden, können Sie ein
Timer
zum ausführen einer Prozedur alle x Millisekunden.Diese blockieren nicht Ihre aktuellen thread.
DispatcherTimer
im Fall von WPF).Es wurde die Methode in Frage ist die Ausführung auf einen anderen thread als den rest der Anwendung, führen Sie dann die folgenden:
Update
Diese nicht sperren den rest der Anwendung, nur der thread, der ausgeführt wird, Ihre Methode.
Mit einem timer sollte den trick tun
wenn Sie Bedarf an einem thread dann hier ist ein Beispiel
Asynchron Aufgabe: