Laden...

BackgroundWorker kann Fortschritt nicht melden (InvalidOperationException)

Erstellt von Corpsegrinder vor 16 Jahren Letzter Beitrag vor 16 Jahren 3.291 Views
C
Corpsegrinder Themenstarter:in
401 Beiträge seit 2007
vor 16 Jahren
BackgroundWorker kann Fortschritt nicht melden (InvalidOperationException)

Hi...

Ich habe mal versucht folgendes Beispiel aus dem neuen Entwickler Magazin zu Compilen: Überraschend einfache Thread-Programmierung in C# mittels der BackgroundWorker-Komponente

Mein Code dazu sieh folgendermaßen aus:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace ThreadTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            backgroundWorker1.RunWorkerAsync();
        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            AufwaendigerVorgang2(worker, e);
        }

        private void backgroundWorker1_RunWorkerCompleted()
        {
            
        }

        private void buttonStop_Click(object sender, EventArgs e)
        {
            backgroundWorker1.CancelAsync();
        }

        private void backgroundWorker1_ProgressChanged(ProgressChangedEventArgs e)
        {
            progressBar1.Value = e.ProgressPercentage;
        }

        private void AufwaendigerVorgang2(BackgroundWorker worker, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 10; i++)
            {
                if (worker.CancellationPending == true)
                {
                    e.Cancel = true;
                    break;
                }
                worker.ReportProgress(i * 10);
                Thread.Sleep(1000);
            }
        }
    }
}

Nun bekomme ich aber immer eine exception und zwar, dass der BackgroundWorker keinen Fortschritt meldet. Kann mir jemand weiterhelfen?

Danke schonmal im Vorraus!

Greetz

Dario

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Corpsegrinder,

Kann mir jemand weiterhelfen?

ja, die :rtfm: Doku. Bitte immer selber dort nachschauen:

Der Wert der WorkerReportsProgress-Eigenschaft muss true sein, andernfalls löst ReportProgress eine InvalidOperationException aus.

herbivore

C
Corpsegrinder Themenstarter:in
401 Beiträge seit 2007
vor 16 Jahren

Oh... besten dank! Hatte schon danach gesuch, aber nichts gefunden.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Corpsegrinder,

hm, naja, wenn ReportProgress eine Exception auslöst, dann schaut man doch in die Beschreibung von ReportProgress, oder? Und da steht das im zweiten Satz im Abschnitt "Hinweise". Und wenn man da nicht guckt, dann steht im Abschnitt "Ausnahmen" (da sollte, wenn man eine Ausnahme bekommt, nun wirklich gucken)":

InvalidOperationException: Die WorkerReportsProgress-Eigenschaft ist auf false festgelegt.

Daher kann ich leider nicht recht glauben, dass du in der Doku gesucht hast. Aber jetzt weißt du ja, wie man vorgeht. 🙂

herbivore

C
Corpsegrinder Themenstarter:in
401 Beiträge seit 2007
vor 16 Jahren

Nee... in die Doku hab ich net geschaut. Hab danach in Foren etc. gesucht. Naja, nächstes mal weiß ich bescheid. 😉

Hinweis von herbivore vor 16 Jahren

Siehe Anfänger und die MSDN-Doku - Ein Widerspruch?.