Entwickler-Ecke

C# - Die Sprache - Invoke einer Funktion mit Rückgabeparameter ?!?


winx - Di 06.11.07 15:37
Titel: Invoke einer Funktion mit Rückgabeparameter ?!?
Hi,

wie ist es möglich in einer Funktion mit Rückgabeparameter
einen Zugriff auf ein Formular zu machen? Die Funktion
muß invoked werden, damit kein Thread-übergreifender Aufruf eintritt.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
public int emptyWTDetected()
{
if (m_MainForm.InvokeRequired)
{
m_MainForm.BeginInvoke(new EmptyWTdetected(emptyWTDetected));
return -1// WIE KANN ICH DAS lösen
}

bool success = m_mainForm.tuIrgendwas();
return success;

}

bei mir kommt jetzt immer -1 zurück, is ja auch klar irgendwie :-)

Wie kann ich denn das problem lösen???

danke,
winx


Kha - Di 06.11.07 15:43

BeginInvoke ist asynchron, kann also schlecht sofort einen Rückgabewert liefern. Benutze stattdessen die synchrone Variante Control.Invoke.


winx - Di 06.11.07 16:14

alles klar und als return wert? oder diesen weglassen?


Kha - Di 06.11.07 16:16

Was genau meinst du genau bzw. hast du dir den SDK-Artikel zu Invoke überhaupt schon einmal angeschaut?


winx - Di 06.11.07 16:36

hab ich noch nich gelesen, wieso.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
public int emptyWTDetected()
{
if (m_MainForm.InvokeRequired)
{
m_MainForm.BeginInvoke(new EmptyWTdetected(emptyWTDetected));
return -1// WIE KANN ICH DAS lösen
}


Wenn ich hier nix zurückgebe, dann kommt er doch 2mal in die funktion rein
und das is nix...

weisste was ich meine?


Kha - Di 06.11.07 16:59

Du willst die Methode also von einem zweiten Thread aus aufrufen, sie soll dann selbst erkennen, dass sie im falschen Thread ist und sich selbst synchronisiert aufrufen? Interessante Konstruktion ;) , den Rückgabewert der Rekursion bekommst du jedenfalls, wie ich schon schrob, mit Invoke.
Wenn du nur tuIrgendwas synchron aufrufen willst, kannst du natürlich auch einfach gleich diese Methode invoken.

PS: Du solltest dich einmal einigen, ob die Funktion nun int oder bool zurückgibt ;) .


winx - Di 06.11.07 17:18

Habs, glaub ich verstanden :-)
danke für deine Hilfe.

p.s: sie gibt int zurück :-)