我正在尝试使用Silverlight的ChildWindow
对象来创建确认对话框。
理想情况下,我希望它能像MessageBox.Show()
一样工作,直到用户输入后整个应用程序才停止。
例如:
for (int i = 0; i < 5; i++)
{
if (i==3 && MessageBox.Show("Exit early?",
"Iterator", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
break;
}
}
如果用户点击“确定”按钮,将在第3次迭代时停止...
然而,如果我要做类似以下的操作:
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
会是 false,循环会继续超过 3。
我只是想知道如何正确地解决这个问题。Silverlight 是单线程的,所以我不能只是把线程休眠,然后在我准备好时再唤醒它,所以我想知道是否有其他人可以推荐的方法?
我考虑过反转逻辑 - 即将我希望发生的操作传递给 Yes/No 事件,但在我的特定情况下,这不太可行。
谢谢!
YourMethod
中,您是不是想说yield return confirm
? - Drew Noakes