ShowDialog
バックグラウンド スレッドから強制的に戻るにはどうすればよいですか?
フレームワークによって送信されたメッセージをリッスンしている C++/CLR フレームワークの上に構築された WPF アプリケーションがあります。1 つの特定のメッセージが非常に重要であるため、現在のウィンドウをすべて閉じる必要があります。Dialog
ただし、 (メイン ウィンドウから作成された) モーダルShowDialog
がアクティブで、ユーザーの入力を待っている場合、ウィンドウはShowDialog
戻るのを待っているため、閉じません。Dialog
モーダルを強制的に閉じてコード実行を巻き戻すにはどうすればよいですか?
DialogResult
または を設定しようとしましたClose
が、うまくいかないようです。
編集:次のDialog
ように、戻り値を期待するメインウィンドウによって作成されます:(のクリックイベントハンドラー内MainWindow
):
Window modalDialog = new Window();
bool ret = (bool)modalDialog.ShowDialog();
if (ret == true)
{
// do stuff
}
else
{
// do some other stuff
}
フレームワークがメッセージを送信する (UI スレッドとは別のスレッドで受信する) ときは、 を呼び出しますMainWindow.Close()
。この時点でモーダル ダイアログは閉じられますが、Dialog
(after ShowDialog
) の戻り値をチェックするコードはまだスタックにあります。どういうわけか、これによりメインウィンドウが消えなくなります。