我正在使用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()并出现弹出窗口时,代码似乎一直挂在那一行,直到检测到用户响应为止。
有可能使这项工作吗?如果没有,还有其他选择吗?
谢谢
答案 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
答案 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