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由于是另一个线程而不会出现这种问题。
相关推荐
下面将详细解释Winform定时器的工作原理、使用方法以及常见应用场景。 Winform中的定时器主要有两种类型:System.Windows.Forms.Timer和System.Timers.Timer。这里我们主要讨论System.Windows.Forms.Timer,因为它...
在本项目中,开发者创建了一个基于Winform的C#应用程序,该程序实现了从SQL Server数据库向Oracle数据库的数据迁移功能,并且这个迁移过程是通过一个定时器来触发的,确保了数据的实时同步。以下是关于这个项目的...
总之,理解和正确使用C#中的定时器是编写可靠和高性能程序的关键。确保使用 `Stop` 方法或设置 `Enabled = false` 来停止定时器,并注意在多线程环境下的线程安全问题。通过熟悉这些概念和技术,你可以更有效地利用...
在Windows Forms(Winform)应用开发中,有时我们需要在用户界面上执行一些后台任务,例如定期检查网络状态或执行其他耗时操作。本例子重点介绍了如何利用`System.Timers.Timer`组件来实现这样的多线程操作,特别是...
这个简单的小例子展示了Winform、C#和Timer控件的联合使用,为开发更复杂的实时更新界面提供了基础。在实际项目中,可以根据需求对时间格式进行自定义,或者添加更多的逻辑处理,比如添加闹钟、提醒等功能。
在Windows Forms(Winform)应用开发中,...总的来说,理解Winform定时器回调方法的重入以及如何避免它是开发高效、稳定的多线程Winform应用的关键。这个资源提供的源码可能是解决这类问题的一个实例,值得学习和参考。
在Windows Forms(Winform)应用开发中,有时我们需要实时监控系统的资源使用情况,例如CPU和内存的使用率。这有助于优化程序性能或者提供用户界面反馈。以下是一个在Winform中实现这一功能的基本步骤和相关知识点。...
至于备忘录需求分析,这可能是指在软件设计中使用备忘录模式来记录和恢复对象的状态。备忘录模式是一种行为设计模式,它在不破坏封装性的前提下,捕捉一个对象的内部状态,并允许该对象在之后恢复到先前的状态。在...
在C#编程中,Winform定时器(System.Windows.Forms.Timer)是经常被用来实现周期性操作的工具。这个“C#Winform定时器误差测试实例”着重探讨了定时器触发事件的实际间隔与预设间隔之间的误差问题。在实际应用中,如...
若要在后台线程中使用定时器,可以使用`System.Threading.Timer`。 - 使用`BackgroundWorker`组件结合定时器,可以在不阻塞用户界面的情况下执行长时间运行的任务。 5. **实现与应用场景**: - Web版本的多线程...
标题中提到的“解决winform编程中使用线程界面卡死的案例”,主要是指通过创建后台线程来执行那些可能使UI卡死的操作,从而避免阻塞主线程。描述中提到了“用了委托”,这是在.NET框架中进行跨线程操作的关键技术。 ...
下面我们将详细介绍如何在WinForm中使用`ImageAnimator`来播放GIF动画。 1. 加载GIF图片: 在WinForm中,我们可以使用`PictureBox`控件来显示图像。首先,我们需要将GIF文件加载到一个`Image`对象中,然后设置`...
在C#中使用这个封装库,我们需要进行以下步骤: 1. 引入C++/CLR库:首先,在C#项目中添加对C++/CLR库的引用。这可以通过在解决方案中添加项目引用或者将编译后的DLL文件添加为外部引用来实现。 2. 创建接口:为了...
本主题将详细探讨如何使用`BackgroundWorker`来刷新`dataGridView`的行,以及它在WinForm中的工作原理。 `BackgroundWorker`是.NET Framework提供的一种简单机制,用于在后台线程上执行计算密集型任务,同时允许...
【标题】"winform版Cron源代码"指的是在Windows Forms(Winform)应用程序中实现Cron表达式调度功能的源代码。Cron是Unix/Linux系统中的一种任务调度工具,用于按照预定义的时间表执行任务。而在.NET环境中,开发者...
在实际项目中,根据需求的复杂度,可以选择使用简单的Java定时器,或是功能更强大的第三方库。对于初学者,理解并掌握基础的`java.util.Timer` 是个不错的起点,随着对定时任务需求的深入,可以逐渐探索更高级的解决...
要在ASP.NET中使用定时器,你需要进行以下步骤: 1. 在设计视图中,从工具箱拖一个`Timer`控件到你的网页上。 2. 设置`Interval`属性,以毫秒为单位定义时间间隔,比如`10000`表示10秒。 3. 设置`Enabled`属性为`...
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)是.NET框架中一个非常重要的组件,它允许开发者在特定的时间间隔内执行特定的代码块,从而实现周期性的任务。...在实际项目中,正确选择和使用定时器对于实现高效、稳定的应用至关重要。
7. **多线程与异步编程**:了解如何在WinForm应用中使用后台线程执行耗时任务,以避免阻塞UI线程,提升用户体验。 8. **网络通信**:包括TCP/IP、HTTP、FTP等网络协议的使用,实现客户端与服务器的通信。 9. **...