En una aplicación WPF, estoy usando un BackgroundWorker para verificar periódicamente una condición en el servidor. Si bien funciona bien, quiero mostrar un MessageBox notificando a los usuarios si algo falla durante el control.Saltando un MessageBox para la aplicación principal con Backgroundworker en WPF
Esto es lo que tengo:
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");
}
}
Pero este cuadro de mensaje no bloquea la ventana principal. Todavía puedo hacer clic en mi aplicación WPF y cambiar todo lo que quiera con el MessageBox.
¿Cómo soluciono esto? Gracias,
EDIT:
Como referencia, esto es lo que terminé haciendo:
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");
}
Gracias, tuve la sensación de que esto está relacionado con el hilo, pero no tengo ni idea de cómo solucionarlo. El uso de "ReportProgess" o "RunWorkerCompleted" no fue intuitivo, pero leer las explicaciones tiene mucho más sentido. –