
31/12/2007, 06:46
|
 | 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();
}
} |