Zitat von
OregonGhost:
BackgroundWorker funktioniert etwas anders, außer dem DoWork-Event werden alle Events automatisch im richtigen Thread ausgelöst. Vereinfacht ausgedrückt: Auf Form ziehen, im DoWork-Ereignis deine Dinge erledigen und das dann per RunWorkerAsync aufrufen. Die übrigen Ereignisse und Methoden sind zur zusätzlichen Kommunikation gedacht.
Das habe ich jetzt mal gemacht:
Code:
private void button1_Click(object sender, EventArgs e)
{
if (rbThread.Checked)
{
Thread t = new Thread(ThreadProc);
t.Start();
}
else
{
backgroundWorker1.RunWorkerAsync();
}
for (int i = 0; i < 1000; i++)
{
this.listBox1.Items.Add("Main" + i.ToString());
this.listBox1.Update();
this.Text = "Main";
this.Update();
Thread.Sleep(0);
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 1000; i++)
{
this.listBox1.Items.Add("BackgroundWorker" + i.ToString());
this.listBox1.Update();
this.Text = "BackgroundWorker";
this.Update();
Thread.Sleep(0);
}
}
Allerdings bekooe ich bei
this.listBox1.Items.Add("BackgroundWorker" + i.ToString()); eine Fehlermeldung, dass ich versuche aus einem anderen Thread auf ein Steuerelement zu zugreifen.