4

再会。我有一个表格和一个 backgroundworker 。在 bw_Dowork 事件中,有时我需要使用 MessageBox.Show() 打印消息(即 YES?NO 框)。但是,每当我调用 messageBox.Show() 方法时,执行就会冻结,并且表单不允许我单击我的选择(即是/否)。有时,如果我想工作,我必须像消息显示的那样快速单击。否则,当我给出几秒钟的间隙时,它会冻结。我使用 MessageBox.Show() 的实例示例如下所示:

private void bw_DoWork(object sender, DoWorkEventArgs e)
{
    if (fileFTP.Exists == false)
    {
        _busy.WaitOne();

        if ((worker.CancellationPending == true))
        {
            e.Cancel = true;
            return;
        }

        SetText("File Ftp.exe are missing. This file are required to preform update, please contact yout system administrator to retrive Ftp.exe", true);
        MessageBox.Show("File Ftp.exe are missing. This file are required to preform update, please contact yout system administrator to retrive Ftp.exe");
        goto ExitProgram;
    }  
}

在我在网上对此进行了一些研究后,有人建议 MessageBox 干扰了接口线程。这使我使用委托触发消息,但都无济于事。我不得不删除所有的 MessageBoxes。留下一个仍然会在我被解雇时冻结我的执行。请任何帮助将不胜感激。

4

1 回答 1

9

尝试使用主 UI 线程来显示消息框:

this.BeginInvoke((Action)(() => MessageBox.Show("Hello")));

(假设是一个表格)

顺便说一句:“转到”?严重地?

于 2013-11-08T10:28:15.633 回答