来自BackgroundWorker的MessageBox不可见

时间:2018-01-16 09:34:22

标签: c# backgroundworker messagebox

对于我的桌面应用程序,我实现了一个自定义进度条,可以异步执行长时间运行的任务(当然也会报告进度)。

我的主应用程序调用(简化):

myForm aProgress = new myForm(<some_params>);
aProgress.ShowDialog();

表单的构造函数(简化):

BackgroundWorker myWorker = new BackgroundWorker();
myWorker.DoWork += new DoWorkEventHandler(<some_async_stuff>);

和form的加载事件处理程序:

myWorker.RunWorkerAsync();

在此过程中, some_async_stuff 需要显示MessageBox并等待用户响应(是/否)。 Invoke用于强制 MessageBox在前面的显示进度条:

if ((DialogResult)Invoke((Func<DialogResult>)(() => { return MessageBox.Show("question", "caption", MessageBoxButtons.YesNo); })) == DialogResult.No)
    <something>;
else
    <something_else>;

问题:

在大多数情况下,一切(包括MessageBox和用户的响应)都按预期工作。但是有时候MessageBox根本就不会出现,但是应用程序正在等待用户的响应(当然是无限期的)。

此行为难以可靠地重现,偶尔会发生。 有任何想法或类似经历吗?

提前致谢。

0 个答案:

没有答案