C# 在消息框处于活动状态时执行

C# Do While Message Box is active

我正在用 C# 开发一个需要用户从弹出消息框中输入的项目。

我还试图让我的代码在消息框处于活动状态时执行一系列任务。

我的目标是让 MessageBox 描述正在执行的任务,并要求用户观察并验证它们是否正在执行。 我希望这些任务持续执行,直到用户单击 MessageBox 中的响应。

要创建我的消息框,我正在使用:

MessageBox.Show(string <message>, string <caption>, MessageBoxButton.YesNo)

我要做的事情的基本结构如下:

var userInput = MessageBox.Show("Are tasks A, B, C running?", "winCaption", MessageBoxButton.YesNo);
while (// <No response to MessageBox>)
{
    // Task A
    // Task B
    // Task C
    if (userInput == MessageBoxResult.Yes)
    {
        // PASS
        // exit while loop
    }
    else
    {
        // FAIL
        // exit while loop
    }
}

我发现当 MessageBox.Show() 发生并且弹出窗口 window 出现时,代码似乎挂在该行,直到检测到用户响应。

有可能使这项工作吗?如果没有,还有其他选择吗?

谢谢

MessageBox.Show 创建一个模态对话框,这意味着线程上的执行会停止,直到它关闭。您需要创建一个新的 Form 来显示而不是使用内置的 MessageBox

创建表单后,可以这样调用它:

MyForm form = new MyForm();
form.Show(); //Note that this will NOT be modal

请记住 Form 有一种方法可以模态显示它,称为 ShowDialog()。可能有点混乱,所以我在这里总结一下:

MessageBox.Show(); //Modal
Form.Show();       //Not Modal
Form.ShowDialog(); //Modal

如何在单独的 Thread 上调用 MessageBox?

var action = new Action(() =>
{
      var userInput = MessageBox.Show("Are tasks A, B, C running?", "winCaption", MessageBoxButtons.YesNo);
      if (userInput == DialogResult.Yes)
      {
           // PASS
      }
      else
      {
            // FAIL
      }
});
new Thread(new ThreadStart(action)).Start();