C # Do While Message Message активен

Я работаю над проектом на 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 () и появляется всплывающее окно, код, кажется, держится на этой строке, пока не будет обнаружен ответ пользователя.

Можно ли сделать эту работу? Если нет, есть ли альтернативы?

Спасибо

Всего 2 ответа


Как насчет вызова MessageBox на отдельный Thread ?

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();

введите описание изображения здесь


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

Есть идеи?

10000