我正在嘗試使用Silverlight的ChildWindow
對象進行確認對話框。Silverlight確認對話框暫停線程
理想情況下,我希望它能像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 2010-01-21 22:53:09
它可以很容易地被採用在後臺線程中執行枚舉器,使一個非常簡單的多線程UI工作流。 – SLaks 2010-01-21 22:55:29
+1。小問題:你是不是指'YourMethod'中的'yield return confirm'? – 2011-03-17 01:11:22