我有一个表单我正在使用form.showDialog()显示,并且在主表单中我有一个每隔x秒发送一条消息的线程。我注意到,当我在窗口中打开我使用ShowDialog打开的新表单时,线程无法运行。即使使用ShowDialog,如何让它继续运行?
代码:
codeshowAllScriptsWindow window = new showAllScriptsWindow(this);
window.Show();
并且在mainform中我有一个不断发送消息的线程但由于这个showdialog而被停止。请注意,当我使用show()时,它不会发生。
答案 0 :(得分:4)
ShowDialog()是一个阻止调用。线程实际运行,它忙于为对话框抽取消息循环。这与程序主线程中发生的情况没有什么不同。
这样做是非常不明智的,对话框与您应用中的其他窗口没有Z顺序关系。一个经典的不幸是它可以在另一个窗口后面消失,但没有好的方法让用户找回它。使用Control.BeginInvoke在UI线程上创建对话框。这也确保您的线程保持“运行”。
答案 1 :(得分:2)
您正在显示的模式对话框中的消息泵被“窃取”。 您有两个选择:
答案 2 :(得分:1)
虽然乍一看似乎没有关系,但你可以看看这个question。您遇到的问题是form.showDialog()调用创建一个模式对话框,停止该线程上的代码进程。如果您旋转另一个线程并触发该调用,则第一个线程将在对话框显示时继续运行。
答案 3 :(得分:0)
使用System.Threading.Timer而不是System.Windows.Form.Timer。