C # Делайте, пока активно окно сообщения - PullRequest
0 голосов
/ 01 ноября 2018

Я работаю над проектом на 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 ]

0 голосов
/ 01 ноября 2018

Как насчет вызова 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();

enter image description here

0 голосов
/ 01 ноября 2018

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
...