2016-08-26 3 views
-1

Ich habe eine Schleife I wieWie kann ich dies in eine asynchrone Prozedur konvertieren?

gemacht
 for(DateTime later = DateTime.Now.AddSeconds(5); DateTime.Now < later; Thread.Sleep(500)) 
     { 

      // ... stuff 
     } 

und ich frage mich, ob es eine einfache Möglichkeit besteht darin, dass auf eine nicht-blockierende Art und Weise zu tun, Sachen zu konvertieren.

+1

mit einer 'for' Schleife für diese ist sehr werid. Machen Sie es zu einer "while" -Schleife und es wird viel offensichtlicher, wie Sie es in asnyc ändern können. Der "beste Weg", um async zu machen, hängt davon ab, was Sie mit '// ... stuff 'machen. Müssen Sie mit der Benutzeroberfläche interagieren? Müssen Sie nach der For-Schleife noch mehr tun? –

Antwort

0

Meine bevorzugte Methode ist, eine backgroundworker Klasse zu verwenden und Ihre Funktion in die RunWorkerAsynch/DoWork Methode einzufügen. Gute Beispiele sind here und here genannt.

Alternativ können Sie einen separaten Thread ausführen. Es gibt Tonnen von Artikeln über Multi-Threading in C#.

0

ein Thread-Objekt hinzufügen und die Sperrschleife im Inneren setzen, wie folgt aus:

public static void Start() 
    { 
     for(DateTime later = DateTime.Now.AddSeconds(5); DateTime.Now < later; Thread.Sleep(500)) 
     { 
      Console.WriteLine("Other Thread: " + DateTime.Now.ToLongTimeString()); 
     } 
    } 

    public static void Main(string[] args) 
    { 
     Thread thread = new Thread(Start); 
     thread.Start(); 
    } 

Siehe für weitere Informationen https://msdn.microsoft.com/en-us/library/system.threading.threadstart(v=vs.110).aspx.

Hier ist ein kleines Beispiel, das ich gemacht habe ... http://rextester.com/QWMG44444 viel Spaß!

Verwandte Themen