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

本文关键字:之后 showDialog 代码 执行 线程 另一个 窗口 模式 | 更新日期: 2023-09-27 18:29:06

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

在一个线程中,代码将在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()之后的代码可以执行。

要求是当用户在关闭模式窗口后完成一些操作和其他处理时自动关闭模式窗口。

有什么理想的方法来解决它并实现这一要求吗?提前非常感谢。

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

我不确定,但你可以试试

myMsgBox.Close() 
or
myMsgBox.Hide() 

它可能有助于

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