当模式窗口被另一个线程关闭时,showDialog之后的代码不会执行 - C#

时间:2013-08-26 13:50:04

标签: c# window modal-dialog showdialog

在我的程序中,我需要弹出模态窗口提示用户进行一些操作,一旦用户完成操作,模态窗口会自动关闭。

在一个线程中,代码将在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()之后的代码仍无法执行,但当我尝试使用Timer或KeyEventHandler处理此模态时对话框,可以执行ShowDialog()之后的代码。

要求是在用户完成某些操作后自动关闭模态窗口,并在关闭模态窗口后进行其他处理。

任何理想的解决方法并实施此要求?非常感谢。

2 个答案:

答案 0 :(得分:1)

我不确定但你可以试试

myMsgBox.Close() 

or

myMsgBox.Hide() 

它可能会有所帮助

答案 1 :(得分:-1)

除非你有一个长时间运行或慢速运行,否则没有理由你应该用一个单独的线程使你的生活复杂化。只需在模态模式下显示对话框,然后在用户输入所需数据时继续。