Trong một ứng dụng WPF, tôi đang sử dụng một BackgroundWorker để định kỳ kiểm tra tình trạng trên máy chủ. Trong khi đó hoạt động tốt, tôi muốn bật một MessageBox notifing người sử dụng nếu một cái gì đó không thành công trong quá trình kiểm tra.Popping một MessageBox cho ứng dụng chính với Backgroundworker trong WPF
Dưới đây là những gì tôi có:
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");
}
}
Nhưng MessageBox này không chặn cửa sổ chính. Tôi vẫn có thể bấm vào ứng dụng WPF của tôi và thay đổi bất cứ điều gì tôi thích với MessageBox xung quanh.
Làm cách nào để giải quyết vấn đề này? Cảm ơn,
EDIT:
Để tham khảo, đây là những gì tôi đã kết thúc thực hiện:
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");
}
Cảm ơn bạn, tôi đã có một cảm giác rằng đây là liên quan đến chủ đề, nhưng tôi không có ý tưởng làm thế nào để giải quyết nó. Sử dụng "ReportProgess" hoặc "RunWorkerCompleted" không trực quan, nhưng việc đọc các giải thích không tạo ra nhiều ý nghĩa hơn. –