在backgroundworker中访问父窗体

时间:2014-01-14 13:48:30

标签: c# winforms backgroundworker messagebox

我有messagebox.Show()的扩展方法,它使用父winform的IWin32WindowMessageBox置于其中心。

但是,我似乎无法理解如何使用相同的扩展方法在MessageBox内的主/父winform上弹出BackgroundWorker

扩展方法是这样的:

MessageBoxExTn.Show(IWin32Window parentForm, string MsgText, string Caption, MessageBoxButtons);

我的意思是,我想从BackgroundWorker's DoWork事件调用此方法,并使用线程安全访问父/主winform。

3 个答案:

答案 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.");