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