我有messagebox.Show()
的扩展方法,它使用父winform的IWin32Window
将MessageBox
置于其中心。
但是,我似乎无法理解如何使用相同的扩展方法在MessageBox
内的主/父winform上弹出BackgroundWorker
。
扩展方法是这样的:
MessageBoxExTn.Show(IWin32Window parentForm, string MsgText, string Caption, MessageBoxButtons);
我的意思是,我想从BackgroundWorker's
DoWork
事件调用此方法,并使用线程安全访问父/主winform。
答案 0 :(得分:0)
您可以在主表单上添加其他方法并执行类似
的操作public void ShowMessage(string cap,string message)
{
if (this.InvokeRequired)
{
Action<string, string> action = ShowMessage;
this.Invoke(action, new object[] {cap, message});
return;
}
MessageBoxExTn.Show(IWin32Window parentForm, string MsgText, string Caption, MessageBoxButtons);
}
请查看Control.InvokeRequired以了解Windows窗体中的更多线程安全
致电您的代码
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
ShowMessage();
}
答案 1 :(得分:0)
如果要显示消息框,可以在此案例中使用事件并触发事件。现在,在您的父/主窗体中处理此事件并显示消息框。这样你就可以做到这一点。
答案 2 :(得分:0)
您需要利用BackgroundWorker
事件ProgressChanged
。这将为您进行线程切换。想象一下这样的事情:
private void backgroundWorker1_ProgressChanged(object sender,
ProgressChangedEventArgs e)
{
MessageBoxExTn.Show(parentForm,
e.UserState as string,
someCaption,
MessageBoxButtons.OK);
}
这就像这样:
backgroundWorker1.ReportProgress(1, "The message you want displayed.");