在WPF应用中,我使用BackgroundWorker定期检查服务器上的某个条件。虽然这很好运作,但如果在检查过程中发生错误,我希望弹出一个MessageBox通知用户。以下是我的代码:
public static void StartWorker()
{
worker = new BackgroundWorker();
worker.DoWork += DoSomeWork;
worker.RunWorkerAsync();
}
private static void DoSomeWork(object sender, DoWorkEventArgs e)
{
while (!worker.CancellationPending)
{
Thread.Sleep(5000);
var isOkay = CheckCondition();
if(!isOkay)
MessageBox.Show("I should block the main window");
}
}
但这个MessageBox不会阻塞主窗口。我仍然可以在MessageBox存在的情况下点击我的WPF应用程序并更改任何我想要的东西。
我该怎么解决?谢谢。
编辑:
供参考,这是最终所做的:
public static void StartWorker()
{
worker = new BackgroundWorker();
worker.DoWork += DoSomeWork;
worker.ProgressChanged += ShowWarning;
worker.RunWorkerAsync();
}
private static void DoSomeWork(object sender, DoWorkEventArgs e)
{
while (!worker.CancellationPending)
{
Thread.Sleep(5000);
var isOkay = CheckCondition();
if(!isOkay)
worker.ReportProgress(1);
}
}
private static void ShowWarning(object sender, ProgressChangedEventArgs e)
{
MessageBox.Show("I block the main window");
}