Mi aplicación WinForms utiliza un número de objetos BackgroundWorker para recuperar información de una base de datos. Estoy usando BackgroundWorker porque permite que la IU permanezca desbloqueada durante consultas de base de datos de larga ejecución y simplifica el modelo de subprocesamiento para mí.Excepciones no controladas en BackgroundWorker
Recibo ocasionalmente DatabaseExceptions en algunos de estos subprocesos en segundo plano, y he sido testigo de al menos una de estas excepciones en un hilo de trabajo durante la depuración. Estoy bastante seguro de que estas excepciones son tiempos de espera que supongo que es razonable esperar de vez en cuando.
Mi pregunta es acerca de qué ocurre cuando se produce una excepción no controlada en uno de estos hilos del trabajador de fondo.
No creo que pueda detectar una excepción en otro hilo, pero ¿puedo esperar que se ejecute mi método WorkerCompleted? ¿Hay alguna propiedad o método del BackgroundWorker que pueda interrogar para excepciones?
Eso lo hará. Por supuesto, siempre puedes ver la excepción en tu método DoWork y reaccionar en consecuencia (recordando usar Control.Invocar si vas a actualizar la UI). Pero RunWorkerCompleted es de hecho más simple. –
Estoy buscando esta solución. Mi RunWorkerCompleted no se ejecuta cuando simplemente lanzo una nueva excepción() pero aparece una excepción no controlada. atrapar en DoWork no es la verdadera respuesta. Debería haber algo mal en mi BackgroundWorker. – CallMeLaNN
Acabo de pasar las últimas siete horas intentando averiguar por qué mi aplicación no se ejecutará y acaba de salir, y todo porque se produjo un error en BackgroundWorker que no se captó correctamente. +1 para ti y creo que también te mereces una cerveza :-) – EvilDr