2012-03-23 3 views
0

Ich habe eine Winforms-Anwendung, die einige Arbeit mit einem Dienst plant. Der Dienst verfügt über einen Rückruf, der die Datenbank mit den Arbeitsvorgängen aktualisiert.Threading in Winforms, generieren HTML-Bericht nach Abschluss der Aufgaben

Jetzt sagen wir, dass ich x Arbeitsaufgaben einplane. Nachdem alle x-Arbeitsaufgaben abgeschlossen sind, möchte ich einen HTML-Bericht über die Arbeitsstatistiken erstellen. Ich denke, die einzige Möglichkeit, den Arbeitsabschluss aller Elemente zu überprüfen, besteht darin, ihre Beendigungsstatus in der Datenbank anzuzeigen.

Kann mir jemand sagen, wie und wann ich den HTML-Bericht erstellen kann? Ich denke, dass ich einen Thread verwenden kann, um die db abzufragen, um zu sehen, ob alle Arbeit abgeschlossen ist, und UI zu informieren, um den Bericht zu generieren, aber nicht weiß, wie man das implementiert.

+0

Verwenden Sie .NET oder was? – sll

Antwort

1

Sie können die BackgroundWorker-Komponente zum Warten auf asynchrone Task verwenden. Es ist einfach. Ziehen Sie zuerst BackgroundWorker aus der Toolbox in Ihr Formular.

Zweitens - wenn Sie die Verarbeitung (zB auf die Schaltfläche Click-Ereignis) starten fügen Sie folgenden Code:

private void button_Click(object sender, EventArgs e) 
{ 
    backgroundWorker1.DoWork += backgroundWorker1_DoWork;  
    backgroundWorker1.RunWorkerCompleted += backgroundWorker1_RunWorkerCompleted; 
    backgroundWorker1.RunWorkerAsync(); 
} 

Next - zu DoWork Ereignishandler Code hinzufügen, die Verarbeitung und Abfrage-Datenbank startet:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // schedule some work 
    // poll database 
} 

Und zuletzt - fügen RunWorkerCompleted-Handler hinzu, der ausgeführt wird, unmittelbar nachdem DoWork abgeschlossen wurde (dh alle Aufgaben haben ihren Status in der Datenbank aktualisiert):

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    // generate report 
} 

Das ist es. Btw BackgroundWorker konnte den Fortschritt während der Abrufdatenbank melden. Kleine Suche wird Ihnen helfen, wie man das macht :)

0

Sie Task.ContinueWith verwenden können und Task.Wait

Example: Using Task

Task.ContinueWith: Dies verlängert die erste Aufgabe. Führen Sie sofort, nachdem sie beendet

Task.Wait Sie würden diese verwenden, wenn Sie mehrere Task ausführen, um das gleiche Ergebnis liefern kann so zu unterschiedlichen Zeiten tun, dh dieselben Daten aus verschiedenen Web-Services abgerufen werden. (Einfach eine Beispiel). Dies wird ausgeführt, sobald eine der entsprechenden Aufgaben erfolgreich beendet wurde.

+1

Können Sie mir bitte weitere Details geben? – naspras

+0

Ich postete einen anderen Link, der besser erklärt, wie man verwendet. –

Verwandte Themen