2010-12-20 11 views
5

C#, usando VS2010 y tengo algo que no tiene sentido.C#: ¿Por qué mi señal de trabajo de fondo está señalizada cuando no está?

Al inicio, mi programa necesita cargar varios cientos de k de archivos de texto. Después de asegurarme de que el código de carga funcionaba bien, lo arrojé en un hilo de fondo. Siempre que esto se ejecute desde el IDE, todo está bien, pero cuando se ejecuta de manera independiente, el hilo dice que está listo cuando no lo está. Esto por supuesto va en auge.

El código de activación:

BackgroundWorker Background = new BackgroundWorker(); 
Background.RunWorkerCompleted += new RunWorkerCompletedEventHandler(DatabaseLoaded); 
Background.DoWork += new DoWorkEventHandler(delegate { Database.Load(); }); 
Background.RunWorkerAsync(); 

y el material que está pasando en auge es DatabaseLoaded().

Puse algunos messageboxes para rastrear lo que está pasando: La primera y la última línea del método Load() y la primera línea de DatabaseLoaded().

En el IDE esto se dispara como espero: Load() comenzando, Load() hecho, DatabaseLoaded(). Sin embargo, cuando se ejecuta independiente consigo Load() principio, DatabaseLoaded() y luego el cuadro de excepción no controlada (el cargador ni siquiera ha llegado a construir mesas vacías, por no hablar de llenarlos.)

Estoy frutos secos o es Microsoft?

Respuesta

17

RunWorkerCompleted se invocarán en caso de error (como una excepción no controlada en Database.Load()). Compruebe la propiedad Error del RunWorkerCompletedEventArgs.

+0

Eso es todo. Por alguna razón, GetExecutingAssembly(). La ubicación devolvió una ruta diferente y no encontró todo. –

4

Probablemente haya una excepción lanzada desde Database.Load(). BackgroundWorker detecta cualquier excepción no controlada antes de desencadenar el evento RunWorkerCompleted. Consulte la propiedad RunWorkerCompletedEventArgs.Error en DatabaseLoaded.

+0

¿Hay algún eco aquí? – Gabe

+0

:-) solo dos respuestas publicadas casi al mismo tiempo ... Será interesante ver de quién recibirán más votos positivos :-D –

+0

En realidad, la tuya se publicó 5 minutos después. – Gabe

Cuestiones relacionadas