BackgroundWorker RunWorkerCompleted Event

Mi aplicación C # tiene varios trabajadores de fondo. A veces, un trabajador de fondo despedirá a otro. Cuando se completa el primer trabajador de fondo y se RunWorkerCompleted evento RunWorkerCompleted , ¿en qué hilo se RunWorkerCompleted ese evento, la interfaz de usuario o el primer trabajador de fondo del que se llamó a RunWorkerAsync ? Estoy usando Microsoft Visual C # 2008 Express Edition. Cualquier pensamiento o sugerencia que pueda tener será apreciado. Gracias.

Si el BackgroundWorker se creó a partir del subproceso UI, entonces el evento RunWorkerCompleted también se generará en el subproceso UI.

Si se creó a partir de un hilo de fondo, el evento se generará en un hilo de fondo indefinido (no necesariamente el mismo hilo, a menos que esté utilizando un SynchronizationContext personalizado).

Curiosamente, esto no parece estar bien documentado en MSDN. La mejor referencia que pude encontrar estaba aquí :

La forma preferida de implementar multihilo en su aplicación es usar el componente BackgroundWorker . El componente BackgroundWorker usa un modelo basado en eventos para multihilo. El hilo de fondo ejecuta su controlador de eventos DoWork , y el hilo que crea los controles ejecuta los controladores de eventos ProgressChanged y RunWorkerCompleted . Puede llamar a sus controles desde sus controladores de eventos ProgressChanged y RunWorkerCompleted .