2015-03-25 49 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