.net - Windows 窗体计时器与单线程应用程序

标签 .net winforms multithreading timer

我有这个 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/

相关文章:

c# - 将方法的返回值设置为公共(public)字符串

java - 哪个并发列表适合多个作者一个读者?

java - fork /加入 : Collecting results

c# - 查找给定泛型基类型和实现类型的类型

.net - 构建此 Linq-to-Events 拖放代码的最佳方法是什么?

.net - VB.NET中带有动态第二个参数(类型)的CType

multithreading - 类级属性或变量是线程安全的

c# - 在处置 HttpClient 之前是否需要等待异步方法完成?

c# - ProxyFactoryFactory 未配置

c# - 如何转换 C# .NET 应用程序以支持多种语言?