Я пытаюсь сделать диалог подтверждения с помощью объекта Silverlight ChildWindow
.Silverlight Confirm Dialog to Pause Thread
В идеале, я хотел бы, чтобы он работал как MessageBox.Show()
, где все приложение останавливается до тех пор, пока от пользователя не будет получен вход.
Например:
for (int i = 0; i < 5; i++)
{
if (i==3 && MessageBox.Show("Exit early?",
"Iterator", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
break;
}
}
бы остановить итерации в 3, если пользователь нажимает кнопку OK ...
Однако, если бы я сделать что-то вдоль линий:
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;
}
}
}
Это явно не сработало бы, так как нить не остановилась ... confirm.DialogResult.HasResult
будет ложным, и цикл продолжится до 3.
Мне просто интересно, как я могу это сделать. Silverlight однопоточен, поэтому я не могу просто поставить поток спать, а затем разбудить его, когда я буду готов, поэтому мне просто интересно, есть ли что-нибудь еще, что люди могли бы порекомендовать?
Я решил обратить вспять логику, то есть передать действия, которые я хочу встретить в событиях Yes/No, но в моем конкретном случае это не совсем сработало.
Заранее благодарен!
Это довольно гений! Я дам этот снимок и посмотрю, как хорошо он работает ... – AlishahNovin
Его можно легко принять, чтобы выполнить перечислитель в фоновом потоке, создав очень простой многопоточный рабочий процесс пользовательского интерфейса. – SLaks
+1. Незначительная точка: вы не имеете в виду 'yield return confirm' в' YourMethod'? –