Hola, alguien tendra un ejemplo de como usar el componente backgroundWorker tipo Timer, es decir el lugar el Timer usar backgroundWorker, cada cierto tiempo que se ejecute.
estoy trabajando con C# .Net 2005
Gracias.
| ||||
| Hola, alguien tendra un ejemplo de como usar el componente backgroundWorker tipo Timer, es decir el lugar el Timer usar backgroundWorker, cada cierto tiempo que se ejecute. estoy trabajando con C# .Net 2005 Gracias.
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker Sip, eso quiero, pero no conozco este componente y antes de meterme a la investigacion me gustaria saber si alguien tiene algun codigo o algo por el estilo. Gracias.
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker Aqui te pongo un sample pequeño q tenia en mi carpeta de cursos. Archivo con sample en winforms para el BackgroundWorker |
| ||||
| Respuesta: backgroundWorker jajaja en mi trabajo tienen restringido //rapidshare.com porque sera?pos que hay ahi?
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker puedes mandarlo a [email protected]
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: BackgroundWorker Hola colegas, estoy tratando de usar el componente BackgroundWorker para crear varios hilos porque necesito ejecutar dos procesos a la vez, uno que muestre una progressBar y mandarle el avance y otro que ejecute el proceso que se tarda mucho, tengo esto pero me surgío la duda que posteo al final. Aqui es donde se invocan los metodos
Código:
private void btnProcesar_Click(object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += new DoWorkEventHandler(EjecutaProcesos_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(BarraProgreso);
bw.RunWorkerAsync();
}
Este método disparara el método (válgale la redundancia) que ejecuta el SP de proceso aquí es donde me falta enviarle el argumento (object) al método BarraProgreso
Código:
private void EjecutaProcesos_DoWork(object sender, DoWorkEventArgs e)
{
int porcentaje;
for (int i = 0; i < this.gvProcesos.DataRowCount; i++)
{
int vProceso = Convert.ToInt16(((DataTable)(((DataView)(((BaseView)(this.gvProcesos)).DataSource)).Table)).Rows[i]["idProceso"]);
switchProcesos(vProceso);
BarraProgreso("que le mando?", ((BackgroundWorker)(sender)).ReportProgress(porcentaje));
porcentaje++;
}
}
Código:
y por ultimo aquí manejo lo procesos según su IDprivate void BarraProgreso(object sender, ProgressChangedEventArgs e)
{
this.prgBarProcesos.Value = e.ProgressPercentage;
}
Código:
private void switchProcesos(int vProceso)
switch (this.vProceso)
{
case 6:
ActualizaEstatus();
CargaProcesos();
break;
}
La duda es de cómo enviarle el argumento (object) al método BarraProgreso Gracias.
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." Última edición por mvazquez; 09/10/2008 a las 10:34 |
| ||||
| Respuesta: backgroundWorker ahora entiendo porq preguntabas, BarraProgreso("que le mando?", ((BackgroundWorker)(sender)).ReportProgress(porcen taje)); no necesitas invocarlo asi solo haz ((BackgroundWorker)(sender)).ReportProgress(porcen taje); y listo ya funcionara. |
| ||||
| Respuesta: backgroundWorker Que onda Mr. Peter, al parecer eres el único moderador de esta sección del foro… ![]() No, no jala Peter, porque me dice que: “Ninguna sobrecarga para el método 'BarraProgreso' acepta '1' argumentos” y es que el método BarraProgreso tiene dos argumentos y yo solo le estoy enviando uno… ![]()
Código:
BarraProgreso(((BackgroundWorker)(sender)).ReportProgress(porcentaje));
private void BarraProgreso(object sender, ProgressChangedEventArgs e)
{
this.prgBarProcesos.Value = e.ProgressPercentage;
}
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker no , lo estas haciendo mal y no no soy moderador , para eso esta el lalo q con la chamba se desconecta pero ese es el kbron, solo reemplaza dentro del for 1.- BarraProgreso(((BackgroundWorker)(sender)).ReportP rogress(porcentaje)); por 2.- ((BackgroundWorker)(sender)).ReportProgress(porcen taje); y obvio define porcentaje como double o como quieras que sea pero definelo cuando invocas al report Progress de forma implicita invoca a BarraProgreso tu no lo necesitas invocar. RECUERDA solo REEMPLAZA LA LINEA 1 POR LA 2 |
| ||||
| Respuesta: backgroundWorker aaahhh ya, jeje ya entiendo, haré una prueba y te informo, muchas gracias mi estimao Peter............ APRENDE Lalo..!! ![]()
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker jeje........ Peter cuando uso el BackgroundWorker se empina el rendimiento de la pc, así sin el componente el Uso de PF es de 455 MB y el uso del CPU es de 5% y ya con el componente el Uso de PF sube a 1,56MB y el uso del CPU al 33%, estoy en debug no se si tenga algo que ver eso. Lo malo es que se hace super lento estooo
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker naa ya me desanimo este famoso componente, ya quite el debug, lo ejecuto y de repente en alguna línea nada especifica, algunas veces en una u en otra me manda al EntryPoint Application.Run(new Procesos.CierreMensual()) y me dice que "Referencia a objeto no establecida como instancia de un objeto."
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker como quedo tu codigo al final, algo puede estar pasando. no se desanime , por algo estan probados y mas como forma segura de implementar threading. solo muestranos tu codigo y vemos que tiene al final. estoy casi seguro que es por esto
Código:
private void EjecutaProcesos_DoWork(object sender, DoWorkEventArgs e)
{
int porcentaje; //Nunca lo inicializas
for (int i = 0; i < this.gvProcesos.DataRowCount; i++)
{
int vProceso = Convert.ToInt16(((DataTable)(((DataView)(((BaseView)(this.gvProcesos)).DataSource)).Table)).Rows[i]["idProceso"]);
switchProcesos(vProceso);
BarraProgreso("que le mando?", ((BackgroundWorker)(sender)).ReportProgress(porcentaje));
porcentaje++;
}
}
|
| ||||
| Respuesta: backgroundWorker Va....
Código:
private void btnProcesar_Click(object sender, EventArgs e)
{
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += new DoWorkEventHandler(EjecutaProcesos_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(BarraProgreso);
bw.RunWorkerAsync();
}
Código:
private void EjecutaProcesos_DoWork(object sender, DoWorkEventArgs e)
{
int porcentaje = 0;
for (int i = 0; i < this.gvProcesos.DataRowCount; i++)
{
int vProceso = Convert.ToInt16(((DataTable)(((DataView)(((BaseView)(this.gvProcesos)).DataSource)).Table)).Rows[i]["idProceso"]);
switchProcesos(vProceso);
((BackgroundWorker)(sender)).ReportProgress(porcentaje);
porcentaje++
}
}
Código:
Al entrar a alguno de estos métodos es donde truena con este componente sin el todo funciona bien.private void BarraProgreso(object sender, ProgressChangedEventArgs e)
{
this.prgBarProcesos.Value = e.ProgressPercentage;
}
Código:
private void switchProcesos(int idProceso)
{
switch (idProceso)
{
case 4:
this.registroMinitor(4);
Settings.Default.Reporte = "00012";
this.GeneraProcesoID(); //crea procesID
this.CartaIncrementoLC(); //ejecuta SP
this.CrearArchivosPDF("hRptData", "IncrLC.rpt", _IOHelper.CrearDir("LC"));
this.actualiza_registro();
break;
}
}
este es mi lindo código si tienes dudas comentame. Gracias brother.
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker pregunta alguno de tus tantos procesos intenta modificar el gui, al debuggear te marca algun error , la excepción te da mas detalles, probaste poner puntos de debuggeo dentro de cada paso del switch?? probablemente es algo ajeno al componente o que intente modificar el gui y le diga q no es una variable dentro del contexto del hilo actual. puedes poner el codigo de cada metodo o al menos la generalidad del mismo y ver si estan poniendo alguna actualizacion a un label o aun control. |
| ||||
| Respuesta: backgroundWorker Si, ya lo probé todo, estaba pensando que ese proceso (EjecutaProcesos_DoWork) no necesito controlarlo, únicamente el ProgressBar, es decir dejar que el proceso que se tarda pos corra libremente y dentro del ciclo enviarle valores de avance al ProgressBar o simplemente ponerlo en visible = true, pero eso si tiene que estar en un hilo porque de otra manera no se muestra hasta que termina todo. Que os parece?
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." |
| ||||
| Respuesta: backgroundWorker no entonces en vez de usar el BW usa el delegado del ejemplo de los delegados que puse y listo y solo pon que muestre y actualice en el mismo ciclo eso si la aplicacion sera inoperante durante ese tiempo. |
| ||||
| Respuesta: backgroundWorker Cuales ejemplos? ah creo que me lo mandaste por mail... ah no, no me lo mandaste...
__________________ http://vazquezvega.wordpress.com/ "La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás." Última edición por mvazquez; 09/10/2008 a las 18:10 Razón: Siempre no: |