Hi,
also ich wollte einfach mal so Multithreading lernen und als erstes Beispiel wollte ich eine Progressbar in einem seperaten Thread füllen. Ich weiß, dass mich viele jetzt auf das FAQ Posting jagen werden, aber ich habe mir das jetzt mehrmals durchgelesen und blicke nicht durch...
Ich habe also bis jetzt eine Form mit einer Methode Refreshing ( int i ) , die die Progresbar füllen sol:
protected void Refreshing(int i)
{
this.pbar.Value = i;
}
Die Methode die in ihrem eigenen Thread gestartet werden soll ist diese hier:
public void makemove()
{
int j = 0;
for (int i = 0; i<=100; i++)
{
for (j = 0 ; j<=100; j++)
{
if (i % 2 == 0)
{
Invoke(j);
}
else
{
Invoke(j);
}
System.Threading.Thread.Sleep(10);
}
}
}
Natürlich funktioniert es nicht wie es soll, es kommt immer ein CrossThread Fehler... kann mir jemand helfen und evtl ein bisschen erklären? thx
Hallo baer999,
du musst Control.Invoke aufrufen. Es gibt viele verschiedene Invoke-Methoden. Die genaue Aufrufsyntax findest du in dem Thread, durch den du gejagt zu werden befürchtest: [FAQ] Controls von Thread aktualisieren lassen (Invoke-/TreeView-Beispiel)
herbivore
[FAQ] Controls von Thread aktualisieren lassen (Invoke-/TreeView-Beispiel)
das mit deinem invoke ist nicht korrekt.
edit:
herbi war mal wieder schneller
Kleine Ergänzung noch. du kannst auch am Control BeginInvoke aufrufen .
Mein Stackoverflow Profil
Skype Name : Boas.Enkler (bitte einen hinweis in der Kontaktanfrage damit ich euch vom Spam unterscheiden kann)
Hallo Haggy,
danke für den (indirekten) Hinweis. Ich habe die wichtigsten Unterschiede zwischen Invoke und BeginInvoke in die FAQ aufgenommen.
herbivore