Wie starte ich eine Methode nach einem bestimmten Zeitintervall?

9

Es ist klar: Stellen Sie sich zum Beispiel einen Button in meiner Form vor. Wenn der Benutzer auf die Schaltfläche klickt, sollte nach 30 Sekunden eine void-Methode ausgeführt werden.

Es gibt eine Void-Methode "DoAfterDelay", die zwei Eingaben benötigt, die erste ist die Methode, die zu tun ist (mit Delegaten), und die andere ist das Zeitintervall. Also werde ich haben:

%Vor%

Ich brauche also nur einen Code, um den Prozess für ein bestimmtes Zeitintervall anzuhalten. Bisher habe ich diesen Code verwendet, um das zu tun:

%Vor%

Aber dieser Code ist nicht gut für mich, weil er den ganzen Prozess stoppt und das Programm einfriert. Ich möchte nicht, dass das Programm in der Methode "DoAfterDelay" hängen bleibt. Deshalb ist Thread.Sleep nutzlos.

Also könnte jemand einen besseren Weg vorschlagen? Natürlich habe ich danach gesucht, aber die meisten Lösungen, die ich gefunden habe, basieren auf der Verwendung eines Timers (wie hier zum Beispiel). Aber die Verwendung eines Timers ist meine letzte Meinung, da die Methode einmal ausgeführt werden sollte und das Verwenden von Timern das Programm verwirrend zum Lesen macht. Also suche ich nach einer besseren Lösung, wenn es welche gibt. Oder muss ich vielleicht Timer verwenden?

Ich denke, ich muss mit Threads spielen, aber nicht sicher. Also frage ich mich, ob mich jemand zu einer Lösung führen könnte. Vielen Dank im Voraus.

    
Mostafa Farzán 23.06.2014, 17:04
quelle

6 Antworten

7

Können Sie eine Aufgabe verwenden?

%Vor%     
Bartosz Wójtowicz 23.06.2014, 17:09
quelle
11

Hier können Sie die Async-Funktion von .Net 4.5 verwenden

Sie können Task.Delay verwenden und die Verzögerung in Millisekunden angeben. Dies ist eine sehr saubere Art und Weise. zB:

%Vor%     
Jimmy Hannon 23.06.2014 19:18
quelle
0

DoAfterDelay startet einen Timer, der nur einmal ausgeführt wird. Wenn er abläuft, ruft er die 'TheMethod'-Funktion auf. Warum sollte das unordentlich sein?

    
Bluemoon10 23.06.2014 17:20
quelle
0

Hier ist, was Sie wollen:

%Vor%

Einer der Vorteile von Action ist, dass er leicht modifiziert werden kann, um Parameter zu übergeben. Angenommen, Sie möchten eine Ganzzahl an DoSomethingCool übergeben. Ändere einfach so:

%Vor%

Sehr flexibel ...

    
Francine DeGrood Taylor 23.06.2014 17:25
quelle
0

Es gibt mehrere Methoden, um einen Thread zu erstellen, aber natürlich hängt es davon ab, was Sie tun. Sie können einen Thread wie folgt erstellen:

%Vor%

Dieser Thread wird im Hintergrund ausgeführt. Die Funktion, die Sie ausführen möchten, sollte über eine Schlafmethode verfügen, um nach der Verarbeitung zu schlafen. So etwas wie das:

%Vor%

Ich hoffe, das hilft.

Eine weitere Möglichkeit ist, den Thread immer dann zu erstellen, wenn Sie ihn verarbeiten müssen und sich nicht um die Option "Schlaf" kümmern müssen. Erstellen Sie einfach jedes Mal einen neuen Thread, um den Prozess zu laden

    
sunnysidedown916 24.06.2014 16:06
quelle
0

Sie sollten ein Coroutine

erstellen %Vor%

Und rufe es mit:

%Vor%     
David 11.06.2017 12:58
quelle

Tags und Links