//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();
}