Forum: PC-Programmierung Backgroundworker c#


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von lEO (Gast)


Lesenswert?

Hi,

ich habe mal wieder ein Problemchen in C#.
Ich nutzte einen backgroundworker für eine Anwendung.
Sobald ich den backgroundworker beenden möchte erscheint bei der 
Ausführung von
1
backgroundworker_Cycle.CancelAsync();

folgende Meldung:
1
System.InvalidOperationException
2
  HResult=0x80131509
3
  Nachricht = This BackgroundWorker states that it doesn't support cancellation. Modify WorkerSupportsCancellation to state that it does support cancellation.
4
  Quelle = System.ComponentModel.EventBasedAsync
5
  Stapelüberwachung:
6
   ...

von lEO (Gast)


Lesenswert?

1
Init and start Backgroundworker:
2
3
backgroundworker_Cycle.DoWork += bw_Cycle_DoWork;
4
backgroundworker_Cycle.WorkerReportsProgress = true;
5
backgroundworker_Cycle.RunWorkerAsync();
1
Stop/cancel Backgroundworker:
2
backgroundworker_Cycle.CancelAsync();

von Michael (Gast)


Lesenswert?

Die Fehlermeldung sagt doch, was du machen musst: dem Worker beibringen, 
dass er überhaupt gecancelt werden kann.

https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker.workersupportscancellation?view=net-5.0

von Εrnst B. (ernst)


Lesenswert?

Setzen:
backgroundworker_Cycle.WorkerSupportsCancellation = true;

im DoWork auf "CancellationPending" testen, wenn wahr, dem aktuell 
bearbeiteten DoWorkEventArgs die eigenschaft "Cancel" auf true, return.

von Michael (Gast)


Lesenswert?

Ahja, außerdem bringt auch eine direkte Suche mit der Fehlermeldung

https://www.google.com/search?q=%22This+BackgroundWorker+states+that+it+doesn%27t+support+cancellation.+Modify+WorkerSupportsCancellation+to+state+that+it+does+support+cancellation.%22

das gewünschte Ergebnis...

"Modify WorkerSupportsCancellation" steht im Fehlertext!

von lEO (Gast)


Lesenswert?

Hi ja hab den Fehler nicht auch gefunden. Ich muss beim backgroundworker 
den
CancellationPending auf "true" stellen.

von Εrnst B. (ernst)


Lesenswert?

lEO schrieb:
> CancellationPending auf "true" stellen.

Nö. der wird auf true gesetzt, wenn du (von ausserhalb des Workers) 
"CancelAsync();" ausführst. Du musst den Wert nur lesen und entsprechend 
handeln.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.