Perdonen por la tardanza pero aqui esta ( es que se me interpuso una torta jajaja)
Un delegado no es mas (si vienes de un enfoque de c++) un puntero a una función solo eso , pero mas seguro porq todo lo administra .net y es orientado a objetos (nada de que hay perdi el puntero), aunque es solo un tipo por referencia que te permitira invocar uno o mas metodos en tiempo de ejecucion. el tema es extenso no por nada hay al menos 1 capitulo por libro de .net
------
En lo que respecta a lo que necesita el buen mvazquez no es mas que usar el Metodo Invoke
prueba haciendo esto seguramente
Código:
public void MostrarProgressBar(object algo)
{
this.progressBar1.Visible = true;
}
public void ActualizarProgressBar(object algo)
{
progressBar1.Value = Convert.ToInt32(algo);
}
private void button2_Click(object sender, EventArgs e)
{
MostrarProgressBar(null);
for (int i = 0; i < 100; i+=10)
{
System.Threading.Thread.Sleep(1000);
ActualizarProgressBar(i);
}
}
en el codigo anterior hara todo lo que necesite hacer con forme entre a su cola de instrucciones pendientes ahora con algunos cambios mira la diferencia aqui tenemos que usar un delegado para que a la par que nosotros estamos procesando algo requerimos que ese algo haga una actualizacion del UI.
Código:
public delegate void ActualizaGUI(object argumentos);
public void MostrarProgressBar(object algo)
{
this.progressBar1.Visible = true;
}
public void ActualizarProgressBar(object algo)
{
progressBar1.Value = Convert.ToInt32(algo);
}
private void button2_Click(object sender, EventArgs e)
{
this.Invoke(new ActualizaGUI(MostrarProgressBar), new object[] { 0 });
for (int i = 0; i < 100; i+=10)
{
//Supongamos que este proceso tarda demasiado
this.Invoke(new ActualizaGUI(ActualizarProgressBar),new object[]{i});
System.Threading.Thread.Sleep(1000);
}
}
ojo esto dejara colgada la aplicacion si el proceso es lento pero mostrara el progreso, para evitar eso pueden usar un background worker o un hilo y usar BeginInvoke en vez de Invoke lo cual lo hara de forma asincrona y pueden realizar otra operaicon al mismo tiempo.