C sharp - Problema al Acutalizar Progreso BackGroundWorker

 
Vista:

Problema al Acutalizar Progreso BackGroundWorker

Publicado por MilPruebas (1 intervención) el 29/06/2009 20:28:29
Buenas, tengo un problemilla que a ver si me podéis echar una mano porque ya no sé que hacer.

Situación:
Uso de Un BackGroundWorker y varios hilos de ejecución.

Objetivo:
Informar al Objeto BackGroundWorker del Progreso haciendo el trabajo otro hilo distinto al generado por éste.

Caso y problema:

Dado que no quiero que la consola se quede colgada y además quiero hacer una copia de varios ficheros de considerable tamaño aprovechando la multitarea, lo que he hecho ha sido crearme un backgroundWorker y, cuando éste comienza el trabajo (en el disparo del evento del doWork) lanzo varios hilos de ejecución los cuales hacen un copiado de ficheros en un servidor X. Mi problema es que no puedo informar del progreso al objeto de background ya que lo estoy haciendo en un hilo distinto y no puedo usar la "solución puente" que siempre se ha hecho de llamar al invoke usando delegados ya que dicho control (el BackGroundWorker) no tiene método invoke. ¿se os ocurre algo? ¿Si no hubiera otros hilos de por medio no habría problema en el informe del progress para llenar una progressBar por ejemplo, pero aquí no se me ocurre ninguna solución.

A ver si me podéis echar una mano y si no entendéis algo, por favor decídmelo.

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema al Acutalizar Progreso BackGroundWorke

Publicado por MilPruebas (1 intervención) el 30/06/2009 18:00:56
Al final he pasado del BackGroundWorker porque he leído que para situaciones complicadas no es el más adecuado.

Estoy terminando ya de programarlo pero lo que he hecho ha sido crearme un ThreadPool, y, usando el evento OnWorkComplete (y su delegado,claro) , he conseguido saber cual era el estado actual de cada uno de los hilos que lanzo. Una vez que recibo el parámetro del Estado, uso el Invoke con su delegado para actualizar la ProgressBar.

Cuando termine de programarlo colgaré el código por si le vale a alguien.

Ciaoo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema al Acutalizar Progreso BackGroundWorke

Publicado por Yo (1 intervención) el 23/07/2010 02:33:28
Quizas el agregar en el load de la pantalla lo siguiente te pudiera ayudar en algo:
CheckForIllegalCrossThreadCalls = false; //CODIGO C#
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ebert

Problema al Acutalizar Progreso BackGroundWorker

Publicado por Ebert (2 intervenciones) el 07/10/2014 06:04:04
Hola, solo debes declarar un delegado en el codigo principal:
1
public delegate void Invocador();

Luego en cualquier parte del DoWork:
1
2
3
4
5
this.Invoke((Invocador)delegate()
{
    statusLabel.Text = "Hacer cosas en cualquier control de la ventana";
    statusLabel.ForeColor = Color.Red;
 });

Espero que eso te sea de provecho...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar