Foros del Web » Programación para mayores de 30 ;) » .NET »

BackgroundWorker (Componente)

Estas en el tema de BackgroundWorker (Componente) en el foro de .NET en Foros del Web. Me podrían recomendar un control de .Net que se ejecute mientras esta corriendo un proceso, a veces suele suceder de que se esta ejecutando un ...
  #1 (permalink)  
Antiguo 25/09/2008, 09:09
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 20 años, 1 mes
Puntos: 8
Pregunta BackgroundWorker (Componente)

Me podrían recomendar un control de .Net que se ejecute mientras esta corriendo un proceso, a veces suele suceder de que se esta ejecutando un proceso y pues el usuario no ve nada y puede llegar a pensar que la maquina se inhibió y pues necesito que mientras se este ejecutando el proceso ponga algo en la pantalla.

Estoy con WinForm C#

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; 25/09/2008 a las 10:12 Razón: titulo de tema
  #2 (permalink)  
Antiguo 25/09/2008, 09:48
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: Indicador en pantalla

Puedes usar un BackGroundWorker para ejecutar el proceso que tarda y decirle que reporte el progreso no se a un ProgressBar o algun dialogo de avance o en la forma que consideres mas prudente.

Si tienes mas dudas sobre el BackGroudnWorker dejas mensaje
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 25/09/2008, 10:05
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 20 años, 1 mes
Puntos: 8
BackgroundWorker (Componente)

Gracias Peter, lo que estoy haciendo es, en base a un ciclo muestro reportes, pero no muestra el reporte hasta que procesa todo el ciclo, entonces lo que entiendo de BackgroundWorker es que es para ejecutar procesos de manera asincrónica, me gustaría que me ayudaras a saber como puedo aplicarlo en mi proceso.

Gracias

Así es como lo ejecuto, ejecuto el reporte según la cantidad de rows del DataTable pero como te comento se muestra hasta que termina el "for", me gustaría que mostrara el primer reporte y siguiera trabajando con los demás.

Código:
for (int i = 0; i < dt.Rows.Count; i++)
 {
  _CrystalHelper.MostrarReporte(crvReportes, @"\\Reporte\Det.rpt");
 }
Saludos.
__________________
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; 25/09/2008 a las 10:13
  #4 (permalink)  
Antiguo 25/09/2008, 10:23
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: BackgroundWorker (Componente)

ok mira lo q puedes hacer aqui es mas simple aun

lo que necesitas es usar un hilo y crear uno por cada reporte a mostrar, como

Thread hiloNuevo=new Thread(new ThreadStart(metodoainvocar));

y revisar un threadstart parametrizado es decir q lo q harias en cada ciclo seria enviar cvrReportes y la ruta del reporte al nuevo hilo y eso te mostrara cada report como lo fuese terminando.

en hilos paralelos al principal.

Te pongo un sample en 10 min
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 25/09/2008, 10:31
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 20 años, 1 mes
Puntos: 8
Respuesta: BackgroundWorker (Componente)

Okas, Gracas Peter.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #6 (permalink)  
Antiguo 25/09/2008, 10:51
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: BackgroundWorker (Componente)

Perdon por la tardanza

puedes hacer algo como esto

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                Reporte nuevo = new Reporte();
                nuevo.datosReporte = "supongoquetudatasource";
                nuevo.ruta = "tureporte.rpt";
                Thread hiloNuevo = new Thread(new ParameterizedThreadStart(muestrareport));
                hiloNuevo.Start(nuevo);
            }
        }

        void muestrareport(object reporte)
        {
           
            _CrystalHelper.MostrarReporte(((Reporte)reporte).datosReporte,((Reporte) reporte).ruta);      
        }

    }

    public class Reporte
    {
        public string ruta;
        public object datosReporte;
    }
}
esto en un desconocmiento de q es tu crvreports por eso lo puse com oobjeto
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #7 (permalink)  
Antiguo 25/09/2008, 12:09
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 20 años, 1 mes
Puntos: 8
Respuesta: BackgroundWorker (Componente)

ah! crvreports es CrystalReportViewer

Aplicare tu ejemplo para ver como funciona y ya te informare del resultado.

Gracias camarada.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #8 (permalink)  
Antiguo 25/09/2008, 12:44
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 20 años, 1 mes
Puntos: 8
Respuesta: BackgroundWorker (Componente)

No me funciona, me da un error:
No overload for 'ReporteMuestras' matches delegate 'System.Threading.ParameterizedThreadStart'

Código:
        private void Muestras(DataTable dt)
        {
            try
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {                  
                    Thread hiloNuevo = new Thread( new ParameterizedThreadStart(ReporteMuestras)); 

                    hiloNuevo.Start();
                }
                Application.DoEvents();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

         void ReporteMuestras()
        {
            _CrystalHelper.MostrarReporte(crvReportes, @"\\Reportes\Det.rpt");
        }
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #9 (permalink)  
Antiguo 25/09/2008, 12:49
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 2 meses
Puntos: 87
Respuesta: BackgroundWorker (Componente)

porq es parametrizado si es siempre el mismo parametro entonces usa un

ThreadStart(ReporteMuestras)
en vez de
new ParametrizedThreadStart(ReporteMuestras)

el error es porq si es parametrizado ReporteMuestras debe tener un parametro al menos de tipo object

ReporteMuestras(object parametro)
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:29.