我有这个 Windows 窗体,timer1
已启用,并且其间隔设置为 2000 毫秒。
为什么表单每 2 秒显示一个消息框?我的意思是,当第一次计时器滴答时调用 UI 线程将等待,直到按下“确定”按钮,因此如果我不按下按钮,那么就不应该出现另一个消息框。但看来!为什么?
我知道计时器在它自己的线程上工作,并且计时器在其间隔内调用timer_tick函数,问题是当UI线程在mbox.show()上被阻塞时如何显示另一个消息框?
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
MessageBox.Show("test");
}
}
最佳答案
这是因为您使用了MessageBox。它是一个泵送消息循环的模式对话框。因此,所有正常的 Windows 通知仍然会传递。就像油漆事件一样。它唯一阻止的是用户输入通知、鼠标和键盘。但不是计时器消息。 Form.ShowDialog() 方法也以这种方式工作。
您必须自己禁用计时器。
关于.net - Windows 窗体计时器与单线程应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583492/