C# Timer控件详解与SetTimer API应用
需积分: 10 48 浏览量
更新于2024-11-09
收藏 6KB TXT 举报
本文主要介绍了C#中两种不同类型的定时器(Timer)的用法:System.Windows.Forms.Timer和System.Timers.Timer。这两种定时器都是Windows消息机制在.NET平台上的实现,它们在功能和使用场景上有所不同。
首先,System.Windows.Forms.Timer是WinForms控件的一部分,它适用于Windows应用程序中的UI线程控制,例如在Windows消息循环中定期更新用户界面元素或执行特定任务。它通过调用Windows API的SetTimer函数来实现,并且通常用于与图形界面交互,因为它的事件处理是在UI线程中执行的,避免了同步问题。在C#中,创建和配置Windows Forms Timer的例子包括设置间隔时间、添加Elapsed事件处理器以及设置自动重置和启用状态。
```csharp
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 10000; // 设置间隔10秒
timer.Elapsed += new ElapsedEventHandler(theout); // 注册事件处理程序
timer.AutoReset = true; // 事件发生后是否重新开始计时
timer.Enabled = true; // 启动定时器
private void theout(object source, ElapsedEventArgs e) {
MessageBox.Show("OK!");
}
private void button1_Click(object sender, EventArgs e) {
timer.Interval = 1 * 60 * 60 * 1000; // 每小时触发一次
timer.Elapsed += Timer_TimesUp;
timer.Enabled = true;
}
private void Timer_TimesUp(object sender, ElapsedEventArgs e) {
MessageBox.Show("hello");
}
```
相比之下,System.Timers.Timer则是一个独立于UI线程的定时器,它更适合于后台任务或长时间运行的操作,因为它使用.NET ThreadPool进行异步执行。这意味着它的事件处理不会阻塞UI线程,因此可以避免GUI响应变慢的问题。创建System.Timers.Timer的示例如下:
```csharp
System.Timers.Timer timer = new System.Timers.Timer(10000); // 设置间隔10秒
timer.Elapsed += new ElapsedEventHandler(TheTimer_Elapsed); // 注册事件处理程序
timer.AutoReset = true;
timer.Enabled = true;
private void TheTimer_Elapsed(object source, ElapsedEventArgs e) {
MessageBox.Show("定时器触发");
}
private void button1_Click(object sender, EventArgs e) {
timer.Interval = 1 * 60 * 60 * 1000; // 每小时触发一次
timer.Elapsed += Timer_TimesUp;
timer.Enabled = true;
}
private void Timer_TimesUp(object source, ElapsedEventArgs e) {
MessageBox.Show("后台任务完成");
}
```
总结来说,当你需要在UI线程上定期更新UI或处理轻量级操作时,System.Windows.Forms.Timer是合适的选择;而对于后台任务或者需要在独立线程中执行的任务,System.Timers.Timer会更为适用。两者都需要注意处理定时器的启用和停止,以确保程序的稳定性和效率。
232 浏览量
2019-10-20 上传
2009-03-06 上传
2010-11-04 上传
2020-09-04 上传
2020-09-05 上传
207 浏览量
2020-12-22 上传
DJ1213
- 粉丝: 21
- 资源: 8
最新资源
- 高清艺术文字图标资源,PNG和ICO格式免费下载
- mui框架HTML5应用界面组件使用示例教程
- Vue.js开发利器:chrome-vue-devtools插件解析
- 掌握ElectronBrowserJS:打造跨平台电子应用
- 前端导师教程:构建与部署社交证明页面
- Java多线程与线程安全在断点续传中的实现
- 免Root一键卸载安卓预装应用教程
- 易语言实现高级表格滚动条完美控制技巧
- 超声波测距尺的源码实现
- 数据可视化与交互:构建易用的数据界面
- 实现Discourse外聘回复自动标记的简易插件
- 链表的头插法与尾插法实现及长度计算
- Playwright与Typescript及Mocha集成:自动化UI测试实践指南
- 128x128像素线性工具图标下载集合
- 易语言安装包程序增强版:智能导入与重复库过滤
- 利用AJAX与Spotify API在Google地图中探索世界音乐排行榜