Es un ejemplo de como se puede ir modificando una barra de progreso en Winforms, desde una función que se ejecuta en un hilo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
//Llamamos a una función Delegada desde una función que se ejecutar en un hilo delegate void CambiarProgresoDelegado(string texto, int valor); private void CambiarProgreso(string texto, int valor) { if (this.InvokeRequired) //preguntamos si la llamada se hace desde un hilo { //si es así entonces volvemos a llamar a CambiarProgreso pero esta vez a través del delegado //instanciamos el delegado indicandole el método que va a ejecutar var delegado = new CambiarProgresoDelegado(CambiarProgreso); //ya que el delegado invocará a CambiarProgreso debemos indicarle los parámetros object[] parametros = new object[] { texto, valor }; //invocamos el método a través del mismo contexto del formulario (this) y enviamos los parámetros this.Invoke(delegado, parametros); } else { //en caso contrario, se realiza el llamado a los controles lblExportarPdf.Text = texto; barraExportarPdf.Value = valor; } } //Función que se ejecuta en un hilo private void ConvertiraPdf() { ..... CambiarProgreso("Iniciando proceso...", 0); while (..) { CambiarProgreso( string.Format("Ejecutando {0} de {1}.", i,cantidad), i); } } //Llamada a la tarea: private void btnExportarPdf_Click(object sender, EventArgs e) { var tarea = new ThreadStart(ConvertiraPdf); //Creamos la instancia del hilo var hilo = new Thread(tarea); //Iniciamos el hilo hilo.Start(); } |