Threadübergreifendes Form-Handling mit Delegates und Invoke
-
Ich habe mir in einem Thread ein Feld in einem Form erstellt und möchte aus einem anderen Thread drauf zugreifen:
Deshalb habe ich mir erstmal ein Delegate gebastelt (nach Vorlage):
public delegate int GetIndex(); private int GetTestIndex() { return testID; } public int returnTestID() { if (InvokeRequired) BeginInvoke(new GetIndex(GetTestIndex)); else GetTestIndex(); }
Ich habe aber da noch irgendwo ein Problem mit den Übergabewerten oder dergleichen.
Wenn ich diesen Code kompiliere sagt er:
"not all code paths return a value"
und ich weiß leider nicht wie ich das "BeginInvoke" entsprechend umschreibe damit ich den int-Wert zurückbekomme.Kann mir da jemand helfen ?
lG
Woflerl
-
Auf jeden Fall benötigst du in der returnTestID() auch ein return, sonst fallen die Rückgaben unter den Tisch (genau das will dir dein Compiler erklären mit dem "not all code paths return a value").
(wie du die Rückgaben von BeginInvoke() überprüfen und weiterverarbeiten kannst, muß jemand anderes erklären - nach einem ersten Blick in die MSDN tippe ich mal darauf, daß du ihren Rückgabewert an die EndInvoke() verfüttern mußt)
-
ja, das mit dem return ist mir klar, aber wie und woher weiß ich leider nicht
-
Ohne Garantie, daß es funktionieren kann (bin eher in C++ zu Hause als in C#):
public int returnTestID() { if (InvokeRequired) { IAsyncResult res = BeginInvoke(new GetIndex(GetTestIndex)); return (int)EndInvoke(res); } else return GetTestIndex(); }