Autor Beitrag
winx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: Di 06.11.07 15:37 
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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: Di 06.11.07 16:14 
alles klar und als return wert? oder diesen weglassen?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: Di 06.11.07 16:36 
hab ich noch nich gelesen, wieso.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 249



BeitragVerfasst: Di 06.11.07 17:18 
Habs, glaub ich verstanden :-)
danke für deine Hilfe.

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