Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

BackgroundWorker kann Fortschritt nicht melden (InvalidOperationException)
Corpsegrinder
myCSharp.de - Member



Dabei seit:
Beiträge: 401

Themenstarter:

BackgroundWorker kann Fortschritt nicht melden (InvalidOperationException)

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Corpsegrinder,
Zitat
Kann mir jemand weiterhelfen?
ja, die :rtfm: Doku. Bitte immer selber dort nachschauen:
Zitat
Der Wert der WorkerReportsProgress-Eigenschaft muss true sein, andernfalls löst ReportProgress eine InvalidOperationException aus.
herbivore
private Nachricht | Beiträge des Benutzers
Corpsegrinder
myCSharp.de - Member



Dabei seit:
Beiträge: 401

Themenstarter:

beantworten | zitieren | melden

Oh... besten dank! Hatte schon danach gesuch, aber nichts gefunden.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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)":
Zitat
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
private Nachricht | Beiträge des Benutzers
Corpsegrinder
myCSharp.de - Member



Dabei seit:
Beiträge: 401

Themenstarter:

beantworten | zitieren | melden

Nee... in die Doku hab ich net geschaut. Hab danach in Foren etc. gesucht. Naja, nächstes mal weiß ich bescheid.
private Nachricht | Beiträge des Benutzers

Moderationshinweis von herbivore (23.09.2007 - 14:30)

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