Invoke() mit Returnwert

11/03/2010 - 18:22 von Thomas Kehl | Report spam
Hallo zusammen.

Ich habe folgende Methode:

public DialogResult ShowMessage(string text, string caption,
MessageBoxButtons buttons, IWin32Window owner) {
if (this.MainForm.InvokeRequired) {
MethodInvoker methodInvoker = () =>
this.ShowMessage(text, caption, buttons, owner);
var r = this.MainForm.Invoke(methodInvoker);
return DialogResult.No;
}
if (owner == null) {
owner = this.MainForm;
}
return XtraMessageBox.Show(this.DefaultLookAndFeel, owner,
text, caption, buttons, MessageBoxIcon.Information);
}

Das Problem ist nun, dass ich bei this.MainForm.Invoke() keinen
Returnwert bekomme. Kann mir jemand auf die Sprünge helfen, wieso das
so ist? Liegt das am MethodInvoker? - Wenn ja, wie krieg ich das hin,
dass ich bei Invoke einen Return-Wert bekomme?

Vielen Dank für eure Hilfe.

Viele Grüsse, Thomas
 

Lesen sie die antworten

#1 Marcel Roma
11/03/2010 - 19:47 | Warnen spam
Hallo Thomas,

Am Thu, 11 Mar 2010 09:22:20 -0800 (PST) schrieb Thomas Kehl:

Das Problem ist nun, dass ich bei this.MainForm.Invoke() keinen
Returnwert bekomme. Kann mir jemand auf die Sprünge helfen, wieso das
so ist? Liegt das am MethodInvoker?



Es liegt wahrscheinlich am MethodInvoker, der so deklariert ist:
public delegate void MethodInvoker()


Wenn ja, wie krieg ich das hin, dass ich bei Invoke einen Return-Wert bekomme?



1. Delegaten mit der benötigten Signatur deklarieren:

public delegate DialogResult ShowMessageCallback(string text, string
caption, MessageBoxButtons buttons, IWin32Window owner);

2. Methoden-Delegat ausführen:

if (this.MainForm.InvokeRequired)
{
ShowMessageCallback callback = new ShowMessageCallback(ShowMessage);
var r = this.MainForm.Invoke(callback, new object[]{text, caption,
buttons, owner});
// Hier solltest Du nun einen Rückgabewert erhalten
}


Gruss
Marcel

Ähnliche fragen