2015-03-25 39 views
-2

全部。 我做了一个通用的静态方法来使用其他形式。 现在我想返回该消息框结果我怎么能?返回Ivoke消息DialogResult

我使用代码: -

public static DialogResult ShowMessage(Form Parent, string Text, string Caption, MessageBoxButtons Buttons, MessageBoxIcon Icon, MessageBoxDefaultButton DefaultButton) 
    { 
     if (Parent != null && Parent.InvokeRequired) 
      return (DialogResult) Parent.Invoke((Action)(() => MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton))); 
     else 
      return (MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton)); 
    } 

它将引发对象参考误差与简单的消息框(例如OK消息)。 显示消息后出现空引用。

+2

这需要是一个'Func ',而不是一个动作。 – 2015-03-25 13:07:57

+0

好的......这有帮助。 – DDave 2015-03-25 13:11:58

回答

2

Action没有返回值,你应该使用Func代替:

return (DialogResult) Parent.Invoke(new Func<DialogResult>(() => 
{ return MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton); })); 

顺便说一句,如果你不想重复相同的代码(MessageBox.Show(...))两次,您可以通过以下方式使用委托:

delegate DialogResult MyInvoke(Form Parent, string Text, string Caption, MessageBoxButtons Buttons, MessageBoxIcon Icon, MessageBoxDefaultButton DefaultButton); 

public static DialogResult ShowMessage(Form Parent, string Text, string Caption, MessageBoxButtons Buttons, MessageBoxIcon Icon, MessageBoxDefaultButton DefaultButton) 
{ 
    if (Parent.InvokeRequired){ 
     return (DialogResult)Parent.Invoke(new MyInvoke(ShowMessage), Parent, Text, Caption, Buttons, Icon, DefaultButton); 
    } 
    return MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton); 
} 
+0

thnx它的工作。 – DDave 2015-03-25 13:18:34