`

winform中对定时器的使用

阅读更多

    winform中我经常使用到定时器,比如我做过一个每隔10秒钟的时候要截屏一次的小工具就使用定时器来解决这些问题。以我的经验,有两种定时器可用。一个是作为Winform的一个组件Timer(System.Windows.Forms.Timer),这种定时器使用简单,操作方便。还有另一种定时器也经常被使用是 System.Timers.Timer,接下来我会将这两种定时器种写一个例子并作一下比较。

一、System.Windows.Forms.Timer做定时器

    做winform项目时点左边可视化组件栏,找到下面的Timer,这个就是System.windows.forms.timer。将这个组件拖到Form里面,然后设置参数。

 

 
    当拖到Form后,可以看到此时的Timer及其属性,设置其执行的频率,和是否开启,当然这些也可以在程序里面去设置



 

    因此使用了一个定时器timer。会启动和关闭定时器timer.enable = true/false;设置频率为1秒则Interval=1000。然后写具体要执行的方法了。设置timer1的行为。



 在Form1.cs加上timer1_Tick方法,如下所示代码

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private int cnt = 0;

        public Form1()
        {
            InitializeComponent();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            cnt++;
            Console.WriteLine("timer1--- "+cnt);
        }
    }
}

 然后运行程序看一下效果,这样定时器就做出来了,而任务就写在timer1_Tick方法里面

 

二、System.Timers.Timer做定时器

  使用System.Timers.Timer做定时器是一个不错的想法,当然它不像第一种方法一样是可见的,使用起来特别地简单,直接把组件拖到Winform上面就行了。而这里定时器的实现全是靠自己写代码来实现。直接贴上代码吧。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

//引入System.Timer
using System.Timers;
namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        private int cnt = 0;
        private System.Timers.Timer myTimer;

        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {

            //窗体打开时创建定时器,并设置执行频率时间
            this.myTimer = new System.Timers.Timer(1000);
            //设置任务
            this.myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
            this.myTimer.AutoReset = true;
            this.myTimer.Enabled = true;
            this.myTimer.Start();
        }

        /**
         * myTimer定时器执行的任务
         * */
        private void myTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            cnt++;
            Console.WriteLine("myTimer--  "+cnt);
        }
    }
}

 运行程序看一下效果



 这样我们也实现了定时器的功能。接下来比较一下这两种定时器。

三、System.Windows.Forms.Timer与System.Timers.Timer的比较

易用性比较:

   System.Windows.Forms.timer由于是Winform组件,可使用拖拉的方式直接使用和设置参数。双击定时器就可以创建Task方法。开发确实非常容易。而System.Timers.timer则全部在程序里面去写,开发略为复杂。

执行线程比较:

   System.Windows.Forms.timer是在UI线程里面执行的,因为在Task方法里可以直接调用Winform的UI元素,操作UI元互非常简单。而System.Timers.timer则是创建的新线程,不是在UI线程里面执行。因此操作UI元素要困难,只用使用委托然后跨线程来调用UI元素。

准备性比较:

   System.Windows.Forms.timer定时器不频率不准确,你设置它1秒执行一次任务,但他并不完全按这个时间执行,有时候误差还相当大。而System.Timers.timer全完全按设置的时间频率执行,非常准备。

引起UI假死情况:

     System.Windows.Forms.timer定时器会引起UI假死,因为它的运行是UI线程,如果定时任务比较复杂耗时,那UI会有卡的情况出现,这也是这种定时器执行不准的原因。而System.Timers.timer由于是另一个线程而不会出现这种问题。

  • 大小: 18.5 KB
  • 大小: 12.8 KB
  • 大小: 12.3 KB
  • 大小: 4.9 KB
  • 大小: 15.6 KB
  • 大小: 18.9 KB
分享到:
评论

相关推荐

    winform 定时器的使用源码

    下面将详细解释Winform定时器的工作原理、使用方法以及常见应用场景。 Winform中的定时器主要有两种类型:System.Windows.Forms.Timer和System.Timers.Timer。这里我们主要讨论System.Windows.Forms.Timer,因为它...

    从SqlServer导数据到Oracle数据库的winform程序(定时器).zip

    在本项目中,开发者创建了一个基于Winform的C#应用程序,该程序实现了从SQL Server数据库向Oracle数据库的数据迁移功能,并且这个迁移过程是通过一个定时器来触发的,确保了数据的实时同步。以下是关于这个项目的...

    C#中定时器停止问题

    总之,理解和正确使用C#中的定时器是编写可靠和高性能程序的关键。确保使用 `Stop` 方法或设置 `Enabled = false` 来停止定时器,并注意在多线程环境下的线程安全问题。通过熟悉这些概念和技术,你可以更有效地利用...

    关于winform使用timer进行多线程操作的例子

    在Windows Forms(Winform)应用开发中,有时我们需要在用户界面上执行一些后台任务,例如定期检查网络状态或执行其他耗时操作。本例子重点介绍了如何利用`System.Timers.Timer`组件来实现这样的多线程操作,特别是...

    用winform动态实现系统当前日期和时间

    这个简单的小例子展示了Winform、C#和Timer控件的联合使用,为开发更复杂的实时更新界面提供了基础。在实际项目中,可以根据需求对时间格式进行自定义,或者添加更多的逻辑处理,比如添加闹钟、提醒等功能。

    winform 定时器回调方法的重入源码

    在Windows Forms(Winform)应用开发中,...总的来说,理解Winform定时器回调方法的重入以及如何避免它是开发高效、稳定的多线程Winform应用的关键。这个资源提供的源码可能是解决这类问题的一个实例,值得学习和参考。

    Winform中实现监控CPU内存使用率示例代码.zip

    在Windows Forms(Winform)应用开发中,有时我们需要实时监控系统的资源使用情况,例如CPU和内存的使用率。这有助于优化程序性能或者提供用户界面反馈。以下是一个在Winform中实现这一功能的基本步骤和相关知识点。...

    c# winform项目委托和定时器案例分析(两个).rar

    至于备忘录需求分析,这可能是指在软件设计中使用备忘录模式来记录和恢复对象的状态。备忘录模式是一种行为设计模式,它在不破坏封装性的前提下,捕捉一个对象的内部状态,并允许该对象在之后恢复到先前的状态。在...

    C#Winform定时器误差测试实例.rar

    在C#编程中,Winform定时器(System.Windows.Forms.Timer)是经常被用来实现周期性操作的工具。这个“C#Winform定时器误差测试实例”着重探讨了定时器触发事件的实际间隔与预设间隔之间的误差问题。在实际应用中,如...

    多线程定时器Web和Winform双版本

    若要在后台线程中使用定时器,可以使用`System.Threading.Timer`。 - 使用`BackgroundWorker`组件结合定时器,可以在不阻塞用户界面的情况下执行长时间运行的任务。 5. **实现与应用场景**: - Web版本的多线程...

    解决winform编程中使用线程界面卡死的案例

    标题中提到的“解决winform编程中使用线程界面卡死的案例”,主要是指通过创建后台线程来执行那些可能使UI卡死的操作,从而避免阻塞主线程。描述中提到了“用了委托”,这是在.NET框架中进行跨线程操作的关键技术。 ...

    在winform中播放gif动画图片

    下面我们将详细介绍如何在WinForm中使用`ImageAnimator`来播放GIF动画。 1. 加载GIF图片: 在WinForm中,我们可以使用`PictureBox`控件来显示图像。首先,我们需要将GIF文件加载到一个`Image`对象中,然后设置`...

    C#调用多媒体定时器

    在C#中使用这个封装库,我们需要进行以下步骤: 1. 引入C++/CLR库:首先,在C#项目中添加对C++/CLR库的引用。这可以通过在解决方案中添加项目引用或者将编译后的DLL文件添加为外部引用来实现。 2. 创建接口:为了...

    简单多线程 BackgroundWorker 刷新 dataGridView行

    本主题将详细探讨如何使用`BackgroundWorker`来刷新`dataGridView`的行,以及它在WinForm中的工作原理。 `BackgroundWorker`是.NET Framework提供的一种简单机制,用于在后台线程上执行计算密集型任务,同时允许...

    winform版Cron源代码

    【标题】"winform版Cron源代码"指的是在Windows Forms(Winform)应用程序中实现Cron表达式调度功能的源代码。Cron是Unix/Linux系统中的一种任务调度工具,用于按照预定义的时间表执行任务。而在.NET环境中,开发者...

    定时器demo

    在实际项目中,根据需求的复杂度,可以选择使用简单的Java定时器,或是功能更强大的第三方库。对于初学者,理解并掌握基础的`java.util.Timer` 是个不错的起点,随着对定时任务需求的深入,可以逐渐探索更高级的解决...

    asp.net 定时器

    要在ASP.NET中使用定时器,你需要进行以下步骤: 1. 在设计视图中,从工具箱拖一个`Timer`控件到你的网页上。 2. 设置`Interval`属性,以毫秒为单位定义时间间隔,比如`10000`表示10秒。 3. 设置`Enabled`属性为`...

    C# 高精度计时器(可精确到1ms)及其winform案例使用,PrecisionTimer.NET.dll

    PrecisionTimer.dll 高精度计时器(可精确到1ms)及其案例使用 测试1ms输出结果如下 2024/03/22 11:51:07 523 2024/03/22 11:51:07 524 2024/03/22 11:51:07 525 2024/03/22 11:51:07 526 2024/03/22 11:51:07 527 ...

    C#定时器(Timer)

    C#定时器(Timer)是.NET框架中一个非常重要的组件,它允许开发者在特定的时间间隔内执行特定的代码块,从而实现周期性的任务。...在实际项目中,正确选择和使用定时器对于实现高效、稳定的应用至关重要。

    c# winform实例大全(198个Csharp WinForm实例源码)

    7. **多线程与异步编程**:了解如何在WinForm应用中使用后台线程执行耗时任务,以避免阻塞UI线程,提升用户体验。 8. **网络通信**:包括TCP/IP、HTTP、FTP等网络协议的使用,实现客户端与服务器的通信。 9. **...

Global site tag (gtag.js) - Google Analytics