private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { // Deze event handler komt in aktie als BackGroundWorker.ReportProgress wordt aangeroepen LabelPercentage.Visible = true; // De infinite loop geeft altijd percentage 0 terug // De infinite loop geeft een instantie van VoortgangsInformatie terug in "e" // De OneLoop geeft wel percentages terug. // De OneLoop geeft een string terug in "e" // We krijgen één van deze 2 mogelijkheden terug string text = e.UserState as string; VoortgangsInformatie voortgangsInformatie = e.UserState as VoortgangsInformatie; if (text != null) // cast via AS is gelukt { // text += " / " + (e.ProgressPercentage.ToString() + "%"); this.ProgressBar.Value = e.ProgressPercentage; LabelPercentage.Text = text; return; } ; if (voortgangsInformatie != null) // cast via AS is gelukt { text = voortgangsInformatie.WhoAmI + ", ben nu " + voortgangsInformatie.NrOfSecondsProcessed + " seconde bezig"; this.ProgressBar.Value = 0; // Geen voortgang balk bij Infinite Loop, progress staat altijd op 0 procent LabelPercentage.Text = text; return; } ; }
private void InfiniteLoop(BackgroundWorker bw) { int count = 0; var startTime = DateTime.Now; while (!bw.CancellationPending) { Thread.Sleep(1000); count++; // ReportProgress: // Infinite loop kent geen percentage: geef 0 mee als percentage // maar geef wel mee extra gegevens via de userState var userState = new VoortgangsInformatie { NrOfSecondsProcessed = (int)Math.Round((DateTime.Now.Subtract(startTime).TotalSeconds)), WhoAmI = "Ik ben de oneindige loop" }; // userState is een object en kan overal naar wijzen, hier wijst het naar een instantie van ProgressInformation bw.ReportProgress(0, userState); } }