Timer进行定时界面处理

简介: 一、System.Threading.Timer 与System.Windows.Forms.Timer    System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。

一、System.Threading.Timer 与System.Windows.Forms.Timer

    System.Threading.Timer 是一个简单的轻量计时器,它使用回调方法并由线程池线程提供服务。不建议将其用于 Windows 窗体,因为其回调不在用户界面线程上进行(硬要使用的话只能通过委托的方式进行操作界面元素处理)。

    System.Windows.Forms.Timer 是用于 Windows 窗体的更佳选择。要获取基于服务器的计时器功能,可以考虑使用 System.Timers.Timer,它可以引发事件并具有其他功能。

 

二、案例测试说明

1、现需要在界面实现一个倒计时功能。效果如下:

image

图1


案例代码:

 

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Threading;

  10. namespace CountDownCase
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         public delegate void DelegateSetControls(Object state);
  15.         public int timeCount = 10;
  16.         public System.Windows.Forms.Timer timer2;

  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.             timer2 = new System.Windows.Forms.Timer();
  21.             /* This sentence can't be used many times. */
  22.             timer2.Tick += new EventHandler(TimerEventProcessor);
  23.         }

  24.         /*********************---------------------------------------------------------------------------------------------------------------
  25.         * Related operation of timer1
  26.         *-------------------------------------------------------------------------------------------------------------------*****************/
  27.         private void timer1_Tick(object sender, EventArgs e)
  28.         {
  29.             this.label1.Text = "CountDown Beginning......";
  30.             if (timeCount != 0)
  31.             {
  32.                 this.label2.Text = timeCount.ToString() + "Second";
  33.                 timeCount--;
  34.             }
  35.             else
  36.             {
  37.                 this.label2.Text = "0 Second";
  38.                 this.label1.Text = "The countdown is over......";
  39.                 timer1.Stop();
  40.             }
  41.         }

  42.         private void button1_Click(object sender, EventArgs e)
  43.         {
  44.             timeCount = 10;
  45.             timer1.Start();
  46.         }

  47.         /*********************------------------------------------------------------------------------------------------------------------------
  48.         * related operation of timer2
  49.         *-------------------------------------------------------------------------------------------------------------------********************/
  50.         public int timeCountTimer2 = 10;
  51.         private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
  52.         {
  53.             if (timeCountTimer2 != 0)
  54.             {
  55.                 this.label3.Text = timeCountTimer2.ToString() + "second";
  56.                 timeCountTimer2--;
  57.             }
  58.             else
  59.             {
  60.                 this.label3.Text = "0 second";
  61.                 this.label4.Text = "Ready for operation......";
  62.                 this.timer2.Stop();
  63.             }
  64.         }

  65.         private void button2_Click(object sender, EventArgs e)
  66.         {
  67.             timeCountTimer2 = 10;
  68.             this.timer2.Interval = 1000;
  69.             this.timer2.Start();
  70.             this.label4.Text = "CountDown has begun......";
  71.         }

  72.     }
  73. }
img_e25d4fb2f8de1caf41a735ec53088516.pngCountDownCase.zip


2、关键代码分析

窗体控件法使用Timer的步骤:

(1)、拖控件

(2)、设置Timer的几个属性

image

图2


(3)、编写timer的Tick事件

image

图3



  1. private void timer1_Tick(object sender, EventArgs e)
  2. {
  3.     this.label1.Text = "CountDown Beginning......";
  4.     if (timeCount != 0)
  5.     {
  6.         this.label2.Text = timeCount.ToString() + "Second";
  7.         timeCount--;
  8.     }
  9.     else
  10.     {
  11.         this.label2.Text = "0 Second";
  12.         this.label1.Text = "The countdown is over......";
  13.         timer1.Stop();
  14.     }
  15. }



代码法创建Timer的步骤麻烦些:

(1)、创建好对象


  1. timer2 = new System.Windows.Forms.Timer();


(2)、编写Tick事件委托函数并赋值


  1. timer2.Tick += new EventHandler(TimerEventProcessor);
  2.  
  3. private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
  4. {
  5.     if (timeCountTimer2 != 0)
  6.     {
  7.         this.label3.Text = timeCountTimer2.ToString() + "second";
  8.         timeCountTimer2--;
  9.     }
  10.     else
  11.     {
  12.         this.label3.Text = "0 second";
  13.         this.label4.Text = "Ready for operation......";
  14.         this.timer2.Stop();
  15.     }
  16. }


(3)、设置定时触发时钟的时间


  1. this.timer2.Interval = 1000;
  2. this.timer2.Start();


 

OVER!

相关文章
|
小程序 前端开发 安全
小程序全栈开发中的跨域问题及其解决方案
【4月更文挑战第12天】本文探讨了小程序全栈开发中的跨域问题及其解决方案。跨域问题源于浏览器安全策略,主要体现在前后端分离、第三方服务集成和数据共享上。为解决此问题,开发者可采用CORS、JSONP、代理服务器、数据交换格式和域名策略等方法。实践中需注意安全性、兼容性和性能。通过掌握这些解决方案,开发者能更好地处理小程序的跨域问题,提升用户体验。
772 0
|
SQL 数据库
若依框架---树状层级部门数据库表
若依框架---树状层级部门数据库表
1323 0
|
7月前
|
SQL 前端开发 关系型数据库
现在啥软件都有开源,BI 呢?
一直以来国内的同学想找一个方便好用的开源 BI 都不是一件易事,国外的页面不好修改,国内的基本都收费,现在有了润乾开源 BI 了,同学们可以去试一下了,润乾是做报表起家,是报表行业的领头羊,报表功能好,BI 功能也不差,还天然弥补了 BI 缺少报表能力的短板
|
11月前
|
网络协议 Linux C++
《C++ 网络编程:高效实现 TCP/IP 与 UDP 通信》
在数字化时代,网络编程对C++开发者至关重要。本文深入探讨了C++中TCP/IP和UDP通信的高效实现,涵盖网络编程基础、TCP连接建立、I/O模型选择、数据传输优化、连接维护与关闭、UDP特点利用及数据报优化等内容,旨在帮助开发者构建高性能的网络应用程序。
575 21
|
前端开发 JavaScript
HTML 转 Markdown 如此简单
本文推荐 HTML 转为 markdown 的工具和实现方式,并找到了一个快捷技巧,收藏等于学会。
2068 1
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
JavaScript
1.Electron开发环境搭建
1.Electron开发环境搭建
336 0
|
JavaScript 关系型数据库 芯片
LDO电源模块
在电子工程中,LDO电源模块因其低压差和高稳定性被广泛使用。优化PCB设计以提升效率和稳定性是关键。LDO包括uP-MOSFET和PNP类型,选择时需权衡效率与成本。布局时,LDO应靠近负载,减少压降,并确保电源滤波。布线要避免噪声耦合,使用圆弧拐角,加强地线,优化散热。华秋DFM软件能辅助检查布局布线,统计焊点,跟踪元件,确保设计符合生产和性能要求。
283 2
|
存储 缓存 编解码
FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
FFmpeg开发笔记(五):ffmpeg解码的基本流程详解(ffmpeg3新解码api)
|
前端开发 Java 数据库
现代数据库管理系统及其应用
现代数据库管理系统(DBMS)是计算机科学领域的重要组成部分,它在各个行业和领域中发挥着重要作用。本文将介绍数据库管理系统的基本概念、特点和分类,并探讨其在前端开发、后端开发以及Java、Python和C等编程语言中的应用。