Próbuję zrobić okno dialogowe z potwierdzeniem za pomocą obiektu Silverlight o numerze ChildWindow
.Silverlight Potwierdź okno dialogowe, aby wstrzymać wątek
Idealnie, chciałbym, aby działało jak MessageBox.Show()
, gdzie cała aplikacja zatrzymuje się, dopóki dane wejściowe nie zostaną odebrane 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 iteracji na 3, jeśli użytkownik kliknie OK ...
Jednak jeśli miałbym zrobić coś wzdłuż linii:
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 zostanie zatrzymany ... confirm.DialogResult.HasResult
byłby fałszywy, a pętla potrwa dłużej niż 3.
Zastanawiam się, jak mógłbym zrobić to poprawnie. Silverlight jest jednowątkowy, więc nie mogę po prostu uśpić nici i obudzić go, kiedy jestem gotowy, więc zastanawiam się, czy jest coś jeszcze, co ludzie mogliby polecić?
Zastanawiałem się nad odwróceniem logiki - tj. Przekazaniem działań, które chcę wykonać, na zdarzenia Tak/Nie, ale w moim konkretnym przypadku to by nie działało.
Z góry dziękuję!
To całkiem geniusz! Zrobię to zdjęcie i zobaczę jak to działa ... – AlishahNovin
Można go łatwo zaimplementować do wykonania modułu wyliczającego w wątku tła, co czyni bardzo prosty wielowątkowy przepływ pracy interfejsu użytkownika. – SLaks
+1. Drobny punkt: nie masz na myśli zwrotu 'yield return'' w' YourMethod'? –