In un'app WPF, sto usando un BackgroundWorker per verificare periodicamente una condizione sul server. Mentre ciò funziona, voglio far apparire un MessageBox che notifica agli utenti se qualcosa non funziona durante il controllo.Popping un MessageBox per l'app principale con Backgroundworker in WPF
Ecco quello che ho:
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");
}
}
Ma questo MessageBox non blocca la finestra principale. Posso ancora fare clic sulla mia app WPF e modificare tutto ciò che mi piace con il MessageBox in giro.
Come posso risolvere questo? Grazie,
EDIT:
Per riferimento, questo è quello che ho finito per fare:
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");
}
Grazie, ho avuto la sensazione che questo è legato thread, ma non ho idea di come risolverlo. L'utilizzo di "ReportProgess" o "RunWorkerCompleted" non era intuitivo, ma la lettura delle spiegazioni ha molti più sensi. –