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

时间:2018-11-01 16:11:48

标签: c# wpf user-input messagebox

我正在使用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 :(得分:2)

在单独的import threading class ThreadingExample(object): """ Threading example class The run() method will be started and it will run in the background until the application exits. """ def __init__(self, interval=10): """ Constructor :type interval: int :param interval: Check interval, in seconds """ self.interval = interval thread = threading.Thread(target=self.run, args=()) thread.daemon = True # Daemonize thread thread.start() # Start the execution def run(self): """ Method that runs forever """ while True: # Do something print('Doing something imporant in the background', self.interval) pk_info_semaine = job_temp.objects.all() for a in pk_info_semaine: print('num_semaine:',a.num_semaine,'user_id:',a.user_id) time.sleep(self.interval) example = ThreadingExample() 上调用MessageBox怎么样?

Thread

enter image description here

答案 1 :(得分:1)

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