Silverlight Confirm Dialog, aby wstrzymać wątek
Próbuję wykonać okno dialogowe potwierdzenia za pomocą SilverlightChildWindow
obiekt.
Idealnie, chciałbym, żeby to działałoMessageBox.Show()
, gdzie cała aplikacja zatrzymuje się do momentu otrzymania danych wejściowych od użytkownika.
Na przykład:
for (int i = 0; i < 5; i++)
{
if (i==3 && MessageBox.Show("Exit early?",
"Iterator", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
break;
}
}
Zatrzymałby iterację przy 3, jeśli użytkownik kliknie OK ...
Jeśli jednak miałbym zrobić coś na wzór:
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;
}
}
}
To oczywiście nie zadziała, ponieważ wątek nie jest zatrzymany ...confirm.DialogResult.HasResult
byłoby fałszywe, a pętla byłaby kontynuowana po 3.
Zastanawiam się tylko, jak mogę to właściwie zrobić. Silverlight jest jednowątkowy, więc nie mogę po prostu przestawić wątku w stan uśpienia, a potem go obudzić, gdy będę gotowy, więc zastanawiam się tylko, czy ludzie mogą polecić coś jeszcze?
Rozważyłem odwrócenie logiki - tj. Przekazanie działań, które chcę wykonać, do zdarzeń Tak / Nie, ale w moim konkretnym przypadku to nie zadziałałoby.
Z góry dziękuję!