C# 里的Timer

2种用法

1.拖控件  System.Windows.Forms.Timer

拖一个Timer控件上去,设置间隔时间Interval  5000(5秒)

然后再Timer控件的 行为里,有个Tick的,选择按钮事件。

在按钮事件里

timer1.Enabled = true;

然后每隔5s,就会执行一次这个按钮事件

如果要停止,设置 timer1.Enabled=false;就行了


2.自定义    System.Timers.Timer

private void button1_Click(object sender, EventArgs e)
        {
          System.Timers.Timer testTimer = new System.Timers.Timer(1000); // 5 seconds
            testTimer.Elapsed += new ElapsedEventHandler(OnTimerElapsed);

            testTimer.Enabled = true;

        }

        private static void OnTimerElapsed(object source, ElapsedEventArgs e)
        {
            Console.WriteLine("Timer elapsed at {0}", e.SignalTime);
        }


Windows.Forms.Timer是通过windows的消息机制发送Timer事件。它仅可在能处理windows消息循环的线程使用。

System.Threading.Timer是最轻量级的,它将在系统线程池分配的线程中定时运行,所以每次运行的线程不一定相同。

System.Timers.Timer基于服务器的计时器是传统的计时器为了在服务器环境上运行而优化后的更新版本。线程计时器是一种简单的、轻量级计时器,使用回调方法而不是事件,并由线程池线程提供。

在 Win32 体系结构中有两种类型的线程:UI 线程和辅助线程。UI 线程绝大多数时间处于空闲状态,等待消息循环中的消息到来。一旦接收到消息,它们就进行处理并等待下一个消息到来。另外,辅助线程用来执行后台处理而且不使用消息循环。Windows 计时器和基于服务器的计时器在运行时都使用 Interval 属性。线程计时器的时间间隔在 Timer 构造函数中设置。计时器的设计目的各不相同,它们的线程处理明确地指出了这一点: 

Windows 计时器是为单线程环境设计的,其中,UI 线程用于执行处理。Windows 计时器的精度限定为 55 毫秒。这些传统计时器要求用户代码有一个可用的 UI 消息泵,而且总是在同一个线程中操作,或者将调用封送到另一个线程。对于 COM 组件来说,这样会降低性能。 
基于服务器的计时器是为在多线程环境下与辅助线程一起使用而设计的。由于它们使用不同的体系结构,因此基于服务器的计时器可能比 Windows 计时器精确得多。服务器计时器可以在线程之间移动来处理引发的事件。 
对消息不在线程上发送的方案中,线程计时器是非常有用的。例如,基于 Windows 的计时器依赖于操作系统计时器的支持,如果不在线程上发送消息,与计时器相关的事件将不会发生。在这种情况下,线程计时器就非常有用。 
Windows 计时器位于 System.Windows.Forms 命名空间中,服务器计时器位于 System.Timers 命名空间中,而线程计时器位于 System.Threading 命名空间中。

System.Threading.Timers命名空间中的Timer类主要是针对多线程情况下使用的。而System.Windows.Forms.Timer中的Timer主要是单线程的,即主要是针对某个窗体使用的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值