Ho una piccola applicazione WinForms che utilizza un oggetto BackgroundWorker per eseguire un'operazione di lunga durata.Eccezioni non gestite in BackgroundWorker
L'operazione in background genera eccezioni occasionali, in genere quando qualcuno ha un file aperto che viene ricreato.
Indipendentemente dal fatto che il codice venga eseguito dall'IDE o non .NET, viene visualizzata una finestra di dialogo di errore che informa l'utente che si è verificata un'eccezione non gestita. Compilare il codice utilizzando la configurazione di rilascio non cambia neanche questo.
Secondo MSDN:
Se l'operazione solleva un'eccezione che il codice non gestisce, il BackgroundWorker cattura l'eccezione e lo passa al gestore di eventi RunWorkerCompleted, dove è esposta la proprietà Error System.ComponentModel .. ::. RunWorkerCompletedEventArgs. Se si esegue il debugger di Visual Studio, il debugger si interromperà al punto nel gestore di eventi DoWork in cui è stata sollevata l'eccezione non gestita.
Mi aspetto che queste eccezioni vengano generate occasionalmente e vorrei gestirle nell'evento RunWorkerCompleted piuttosto che in DoWork. Il mio codice funziona correttamente e l'errore viene gestito correttamente all'interno dell'evento RunWorkerCompleted ma non riesco, per tutta la vita, a capire come interrompere la finestra di dialogo di errore .NET che si lamenta del verificarsi dell'eccezione non gestita.
Non si presume che lo sfondo abbia rilevato automaticamente l'errore in questione? Non è quello che afferma la documentazione MSDN? Che cosa devo fare per informare .NET che questo errore è gestito da mentre ancora consente all'eccezione di propagarsi nella proprietà Error di RunWorkerCompletedEventArgs?
+1 Buon punto. Il mio esempio ha evidenziato le specifiche di gestione dell'errore, ma il mio codice causerebbe effettivamente un'altra eccezione se un'eccezione non veniva mai colpita nel metodo DoWork. –
Mi permetto di dissentire .... Sto anche cercando di capire come la classe BGW si diverte ... a volte la mia app mi consente di accedere alla mia area utente su Win7 ea volte no. Quando indago ulteriormente, ho scoperto che l'accesso negato è perché la cartella non esiste. Trovo che a volte l'errore viene generato nella mia app e talvolta no. – IbrarMumtaz
@Ibrar, stai sempre verificando l'errore e.Error nel tuo gestore di eventi RunWorkerCompleted? Assicurati di controllare prima di fare qualsiasi cosa. Tutte le eccezioni rilevabili saranno riportate qui. –