ChildWindowSilverlight のオブジェクトを使用して確認ダイアログを表示しようとしています。
MessageBox.Show()理想的には、ユーザーからの入力が受信されるまでアプリケーション全体が停止するように動作するようにしたいと思います。
例えば:
for (int i = 0; i < 5; i++)
{
if (i==3 && MessageBox.Show("Exit early?",
"Iterator", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
{
break;
}
}
ユーザーがOKを押すと、反復は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.HasResultfalse になり、ループは 3 を超えて継続します。
どうすればこれを適切に行うことができるのか、ただ疑問に思っています。Silverlight はシングル スレッドであるため、スレッドをスリープ状態にし、準備ができたら起動することはできません。
ロジックを逆にすること、つまり、発生させたいアクションを Yes/No イベントに渡すことを検討しましたが、私の特定のケースでは、これはうまくいきません。
前もって感謝します!