Ver Mensaje Individual
  #4 (permalink)  
Antiguo 31/12/2007, 06:46
Avatar de Peterpay
Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 6 meses
Puntos: 87
Re: C# Clase con Eventos, error actualizando control.

checate el ejemplo que puse en el post del progressbar aqui mismo.

lo q pasa es esto cuando creas tu aplicacion el boton es parte de tu forma. pero muy probablemente estes invocando la carga de datos en otro hilo, es por ello q tienes ese error de comunicacion interhilos, facilmente solucionable.

Lo q necesitas hacer es uno, ya q tu carga esta en otro hilo (hijo ) es invocar el delegado q actualizara tu forma. si es un objeto facilmente puedes obtener la propiedad a mostrar

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

private void Form1_Load(object sender, EventArgs e)
{
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_Prog ressChanged);
this.mireportador += new ReportaAvance(Form1_mireportador);
backgroundWorker1.WorkerReportsProgress = true;
}

void Form1_mireportador(int avance)
{
progressBar1.Value = avance;
}

public delegate void ReportaAvance (int avance);
public event ReportaAvance mireportador;

void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
BeginInvoke(mireportador, e.ProgressPercentage);
}


// Tu codigo puede ir aqui. y en vez de reportar un avance en el progressbar solo pasas un valor como el nombre de la fila de tu datareader o estructura. void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{

System.Threading.Thread.Sleep(i * 1000);

backgroundWorker1.ReportProgress(i);
}
}

private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
}