Tôi đang cố gắng thực hiện hộp thoại xác nhận bằng cách sử dụng đối tượng ChildWindow
của Silverlight.Hộp thoại xác nhận Silverlight để tạm dừng chủ đề
Lý tưởng nhất, tôi muốn nó hoạt động như MessageBox.Show()
, trong đó toàn bộ ứng dụng tạm dừng cho đến khi nhận được dữ liệu nhập từ người dùng.
Ví dụ:
for (int i = 0; i < 5; i++)
{
if (i==3 && MessageBox.Show("Exit early?",
"Iterator", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
break;
}
}
sẽ ngăn chặn sự lặp đi lặp lại ở 3 nếu người dùng chạm OK ...
Tuy nhiên, nếu tôi được làm một cái gì đó dọc theo dòng:
ChildWindow confirm = new ChildWindow();
confirm.Title = "Iterator";
confirm.HasCloseButton = false;
Grid container = new Grid();
Button closeBtn = new Button();
closeBtn.Content = "Exit early";
closeBtn.Click += delegate { confirm.DialogResult = true; confirm.Close(); };
container.Children.Add(closeBtn);
Button continueBtn = new Button();
continueBtn.Content = "Continue!";
continueBtn.Click += delegate { confirm.DialogResult = false; confirm.Close(); };
container.Children.Add(continueBtn);
confirm.Content = container;
for(int i=0;i<5;i++) {
if (i==3) {
confirm.Show();
if (confirm.DialogResult.HasResult && (bool)confirm.DialogResult) {
break;
}
}
}
Điều này rõ ràng sẽ không hoạt động vì luồng không bị dừng lại ... confirm.DialogResult.HasResult
sẽ là sai và vòng lặp sẽ tiếp tục qua 3.
Tôi chỉ tự hỏi, làm thế nào tôi có thể đi về việc này đúng cách. Silverlight là đơn luồng, vì vậy tôi không thể chỉ đưa thread vào giấc ngủ và sau đó đánh thức nó khi tôi đã sẵn sàng, vì vậy tôi chỉ tự hỏi nếu có bất cứ điều gì khác mà mọi người có thể giới thiệu?
Tôi đã xem xét đảo ngược logic - tức là, chuyển các hành động tôi muốn xảy ra cho các sự kiện Có/Không, nhưng trong trường hợp cụ thể của tôi, điều này sẽ không hoạt động.
Cảm ơn trước!
Đó là một thiên tài tuyệt vời! Tôi sẽ cung cấp cho một shot và xem nó hoạt động tốt như thế nào ... – AlishahNovin
Nó có thể dễ dàng được áp dụng để thực thi điều tra trong một chủ đề nền, làm cho một luồng công việc UI đa luồng rất đơn giản. – SLaks
+1. Điểm nhỏ: bạn không có nghĩa là 'trả về lợi nhuận' trong' YourMethod'? –