Formularele de tip 3 (cu timer, bara de progres și butonul de anulare pentru funcționarea asincronă):
UPD: a rezolvat problema prin transferarea apelului ThirdForm la metoda checkBox1_CheckedChanged după apelarea vorker. Problema a fost exact în apelul a 3 formulare din backgroundWorker1_DoWork. În interiorul metodelor de lucru, aceste apeluri nu funcționează corect (cel puțin nu așa cum ne-ar plăcea). Cu toate acestea, a existat o altă problemă - butonul de anulare pentru operația din piesa de prelucrat 3 nu funcționează (nu se întâmplă nimic). Încă nu înțeleg cum să numesc corect terminarea unui lucrător dintr-o altă formă.
UPD2: Problema cu butonul este rezolvată după cum urmează:
Modificări ale codului din formularul 3:
Prelucrarea în a doua formă:
Formularul ar trebui să închidă sau să afișeze un mesaj de eroare (sau MessageBox, sau programul va cădea). Eroarea nu poate avea loc dacă nu a fost în fluxul principal (de exemplu, dacă backgroundWorker1_RunWorkerCompleted sarcină într-un alt fir).
Vă sugerez, doar pentru a introduce Invoke în această metodă
În același timp, a adăugat o dată pe messageBox, pentru a vă asigura că backgroundWorker1_RunWorkerCompleted doar face munca.
În ceea ce privește întreruperea BackgroundWorker folosind metoda Abort (), ca și pentru Thread, atunci, din păcate, nu o suportă. Desigur, a face Abort () nu este de dorit, pentru că rămâne conexiune. Deși colectorul de gunoi îl va închide mai târziu.
Cred că are sens să abandoneze complet BackgroundWorker și toate implementate pe fir, punând toate codul interfeței în Invoke () (formular nu poate fi schimbat într-un alt fir).