Forum: PC-Programmierung Backgroundworker c#


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.