0

私のプログラムでは、ユーザーにいくつかの操作を行うようにモーダル ウィンドウ プロンプトを表示する必要があります。ユーザーが操作を終了すると、モーダル ウィンドウは自動的に閉じます。

1 つのスレッドでは、コードは でブロックされShowDialog()、それ以降のコードは実行できません。次のようなメイン ソース コード:

MyMessageBox myMsgBox = null

private void UserInputRead()
{
  myMsgBox = new MyMessageBox(); //customerized messageBox extends from Form
  //some operation
  Thread t1 = new Thread(UserInputListener);
  t1.start();
  myMsgBox.ShowDialog();
  Console.WriteLine("...after showDialog()");
}

他のスレッドでは、ユーザー入力を監視し、要件を満たしている場合はモーダル ダイアログを破棄します。

private void UserInputListerner()
{
  //monitor user input 
  if(xxx) //user input meet the requirement
  {
     myMsgBox.Dispose()
  }
}

ユーザー入力が要件を満たしている場合、モーダル ダイアログは破棄されますが、後のコードはShowDialog()実行できませんが、タイマーを使用するかKeyEventHandler、このモーダル ダイアログを破棄しようとすると、後のコードをShowDialog()実行できます。

要件は、ユーザーがモーダル ウィンドウを閉じた後にいくつかの操作やその他の処理を終了したときに、モーダル ウィンドウを自動的に閉じることです。

それを解決してこの要件を実装する理想的な方法はありますか? よろしくお願いします。

4

2 に答える 2

1

よくわかりませんが、試してみてください

myMsgBox.Close() 

or

myMsgBox.Hide() 

それは役立つかもしれません

于 2013-08-26T14:17:12.420 に答える