Control Invoke bei Threading

Hallo,

ich habe eine Frage bzgl Threads und Invoke.

Ich habe einen Thread der eine Funktion ausführt und am Ende die Ergebnisse auf Textboxen schreibt.

Da dieser Zugriff aus einem anderen Thread erfolgt, als aus dem der die Controls initialisiert hat, müßte ich ja ein Invoke auf die Controls machen.
Folgender Code ist rein theoretisch. habe es noch nicht ausprobiert.
Funktioniert das so ?


Thread th = new Thread(new ThreadStart(DoSomething));
th.Start();

private void DoSomething()
{
if (textbox1.InvokeRequired)
{
textbox1.Invoke(new MethodInvoker(DoSomething));
return;
}


textbox1.Text= ergebniss;
}

Ich starte einen Thread, der bearbeitet irgendwas und schreibt den text in die Textbox.
Per InvokeRequired prüfe ich ob ein Invoke nötig ist, falls ja mache ein Invoke und rufe die Funktion nochmal auf.

Stimmt das so ?
Brauche ich das InvokeRequired eigentlich oder kann ich das pro-forma schonmal machen ?
Und was mache ich wenn ich nicht eine sondern 50 Textboxen hätte.
Dann würde er bei der ersten rein gehen, prüfen, invoke und funktion nochmal aufrufen.
dann würde er bei der 2ten hängen bleiben oder das spielchen nochmal machen.
quasi eine schleife von 0 bis 49 für jede textbox.

Ich durchsuche gerade die msdn.
ich sehe auch das es eine begininvoke und endinvoke methode gibt aber wie funktioniert das damit ?

danke für tipps.
mfg
Martin

Hallo!

So, wie Du’s gemacht hast, ist es schon OK.
Mit .NET 2.0 wird praktischerweise (zumindest im Debug-Build) eine Exception geworfen, wenn man threadübergreifende Zugriffe hat, damit merkt man es recht schnell, wenn etwas nicht funzt…
Der Unterschied zwischen Invoke() und BeginInvoke() ist letztlich nur, dass BeginInvoke() sofort zurückkommt und Invoke erst dann, wenn der aufgerufene Delegat auch tatsächlich abgearbeitet wurde.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]