似たようなものを見つけようとしましたが、すべての答えを読みましたが、それを私に説明することはできませんでした。asyncは待たずに待っています
ここに、ダイアログポップアップ(WPF)を開くためのサンプルコードがあります。私は、ShowOverlayViewがTrueに変わった後、UIがアクセス可能になる(これがasync-awaitの理由です)と、ユーザーが "閉じる"をクリックしたときに終了するまで待つプログラムが必要です。
小さな説明: ShowOverlayViewModelは、ContentControlのVisibilityプロパティのブール値をtrue/falseに設定します。これが当てはまるので、私は「通常の方法」を待つことは何もありません。
現在、ビューが表示されているときに、MessageBoxがすぐに表示されます。 AutoResetEventを待っているようです。
小更新:これはMessageBox固有のものと思われます。私は、待っているコード行の後でMessageプロパティを変更しようとしましたが、それはare.Set()の後でのみ発生しました。私はまだそれがしたようにMessageBoxがなぜ動作したのか知りたいです。
private void CommandAction()
{
ShowOptionsDialog();
MessageBox.Show("");
}
private async void ShowOptionsDialog()
{
var are = new AutoResetEvent(false);
var viewmodel = new DialogPopupViewModel();
viewmodel.Intialize("some title", "some message", DialogPopupViewModel.YesNoCancelButtons);
SetOverlayViewModel(viewmodel);
viewmodel.SetCloseViewAction(() =>
{
HideOverlayView();
are.Set();
});
ShowOverlayView = true;
await Task.Factory.StartNew(() =>
{
are.WaitOne();
//return viewmodel.DialogResult;
});
//return DialogResultEnum.Cancel;
}
ヘルプ
#usr - これを行う方法については、より良い考えが大好きです。ありがとう –