在我的c#WinForm应用程序中,我正在使用BackgroundWorker进行耗时的任务。现在,如果发生错误,我想显示一个MessageBox。我无法使用ReportProgress
方法,因为我希望可以重试,忽略或取消。因此,我必须从DoWork
线程调用MessageBox,以便可以对DialogResult
进行响应。另外,我还需要MessageBox来阻止DoWork
线程。
这是我到目前为止所拥有的:
private void DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < count; i++)
{
try
{
// Do stuff
}
catch (Exception ex)
{
DialogResult dialog = (DialogResult) this.Invoke(new Func<IWin32Window,DialogResult>((owner) =>
{
return MessageBox.Show(owner, "Something bad happened", "Oooops", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error);
}), this);
if (dialog == DialogResult.Abort)
{
e.Cancel = true;
return;
} // else ...
} // end catch
worker.ReportProgress((int)progress);
} // end for
}
MessageBox出现片刻并消失。窗体变得无响应,好像仍显示消息框。
直接从该线程(没有Invoke
)调用MessageBox也不起作用。我也尝试过使用namend委托。