C# 返回Ivoke消息对话框结果
全部。 我已经做了一个广义静态方法,供其他形式使用。 现在我想返回消息框结果,我该怎么做 我使用的代码如下:-C# 返回Ivoke消息对话框结果,c#,multithreading,C#,Multithreading,全部。 我已经做了一个广义静态方法,供其他形式使用。 现在我想返回消息框结果,我该怎么做 我使用的代码如下:- public static DialogResult ShowMessage(Form Parent, string Text, string Caption, MessageBoxButtons Buttons, MessageBoxIcon Icon, MessageBoxDefaultButton DefaultButton) { if (Parent !
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消息)。
显示消息后会出现空引用。
Action
没有返回值,您应该使用Func
:
return (DialogResult) Parent.Invoke(new Func<DialogResult>(() =>
{ return MessageBox.Show(Text, Caption, Buttons, Icon, DefaultButton); }));
这需要是一个
Func
,而不是一个操作。
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);
}