2016-04-29 4 views
1

Ich versuche, eine async Funktion (ich bin nicht sehr gut mit async im Allgemeinen!) Zu machen und kann sagen, dass ich es dies tun will:Wie wird eine benutzerdefinierte asynchrone Fortschrittsmethode erstellt?

async public string Count() 
{ 
    int x = 0; 

    for(x; x<100000; x++) 
    { 
     await Task.Delay(1); 
    } 

    return "I'm done"; 
} 

Ich mag, dass „x“ fangen und speichern Sie es woanders oder binden Sie es an eine Textbox, die den Fortschritt darstellt, zB. "x/100000"

Wie kann ich das tun?

+0

Ich würde vorschlagen, dass Sie das Ereignis ein Ereignis jedes Mal und Blase Feuer auf der Benutzeroberfläche. [Events] (https://msdn.microsoft.com/de-de/library/8627sbea.aspx) –

Antwort

2

Sie können ein Objekt der Klasse Progress erstellen und an die Methode Count() übergeben. Die Progress-Klasse verfügt über einen Ereignishandler, der jedes Mal aufgerufen werden kann, wenn der asynchrone Task einen Fortschritt meldet. Der Fortschritt wird durch die OnReport Methode berichtet.

var progress = new Progress<int>(); // define your own type or use a builtin type 
progress += (counter) => { //This will be called each time the async func calls Report. 
          //counter will have the reported value 
          } 


    await Count(progress); 

Innerhalb der Count Funktion

async public string Count(Progress<int> progress) 
{ 
int x = 0; 

    for(x; x<100000; x++) 
    { 
     await Task.Delay(1); 
     progress.OnReport(x); 
    } 

    return "I'm done"; 
} 
+0

Vielen Dank für die schnelle Antwort. In der Zwischenzeit bin ich tatsächlich auf "Progress" gestoßen und habe meinen Code zur Arbeit gebracht, aber da deine Antwort genau das ist, wonach ich gefragt habe und du eine so einfache und verständliche Antwort gegeben hast, muss ich sie einfach als einen markieren :) Vielen Dank! :) – DethoRhyne

Verwandte Themen