In einer WPF-App verwende ich einen BackgroundWorker, um regelmäßig nach einer Bedingung auf dem Server zu suchen. Während das gut funktioniert, möchte ich eine MessageBox öffnen, um die Benutzer zu benachrichtigen, wenn bei der Überprüfung etwas fehlschlägt.Eine MessageBox für die Haupt-App mit Backgroundworker in WPF
Hier ist, was ich habe:
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");
}
}
Aber diese MessageBox blockiert nicht das Hauptfenster. Ich kann immer noch auf meine WPF-App klicken und alles, was ich mag, mit der MessageBox ändern.
Wie löse ich das? Danke,
EDIT:
Als Referenz ist das, was ich am Ende tun:
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");
}
Vielen Dank, ich hatte das Gefühl, dass dieser Thread ist verwandt, aber ich habe keine Ahnung, wie es zu lösen. Die Verwendung von "ReportProgess" oder "RunWorkerCompleted" war nicht intuitiv, aber das Lesen der Erklärungen macht viel mehr Sinn. –