文章目录
-
[13. 定时器Timer](#13. 定时器Timer)
-
- [13.1 属性](#13.1 属性)
- [13.2 事件](#13.2 事件)
- [13.3 相关方法](#13.3 相关方法)
- [13.4 实例:实现图片每秒切换一次的功能](#13.4 实例:实现图片每秒切换一次的功能)
-
- [13.4.2 异常记录](#13.4.2 异常记录)
-
WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,是 C# 语言中的一个重要应用。
-
.NET 提供了大量 Windows 风格的控件和事件,可以直接拿来使用。
-
本专栏内容 是按照标题序号逐渐深入的,如有不懂的基础问题,可看前面教程。
13. 定时器Timer
在 Windows 窗体应用程序中,定时器控件(Timer)与其他的控件略有不同,它并不直接显示在窗体上,而是与其他控件连用,表示每隔一段时间执行一次 Tick 事件。定时器控件常用的方法为启动定时器(Start)、停止定时器(Stop).
13.1 属性
- 行为
- Interval:设置计时时间间隔,以毫秒为单位
13.2 事件
cpp
// Tick 方法,根据`Interval` 参数,定时进入Tick 函数
private void timer1_Tick(object sender, EventArgs e)
{
//...
}
13.3 相关方法
cpp
timer1.Start();//开始定时
timer1.Stop();//停止定时
13.4 实例:实现图片每秒切换一次的功能

-
在WinForm中添加一个Timer控件。
- 在Visual Studio的工具箱中,可以找到Timer控件并将其拖拽到窗体设计器中
-
设置Timer控件的属性。
- 在属性窗口中,可以设置Timer的间隔时间(Interval),以毫秒为单位。这个间隔时间决定了每次定时器触发事件的间隔。
-
在窗体的代码文件中,添加定时器的事件处理函数。
- 可以通过双击Tmer控件,自动生成一个名为timer Tick的事件处理函数。在这个函数中,可以编写定时器触发时执行的代码。
Timer控件,拖拽到窗体设计器中,他是显示在下面的空白处 (不会直接显示子啊窗体界面上的)
修改 timer1属性的间隔时间 为 1000ms,
或者 在初始化时 添加时间间隔代码 timer1.Interval = 1000;
cpp
public Form1()//
{
InitializeComponent();
timer1.Interval = 1000; // 设置每隔x毫秒调用一次定时器Tick事件,单位ms
}
完整代码
cpp
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WinFormTest
{
public partial class Form1 : Form
{
//设置当前图片空间中显示的图片的flag
//如果是图片1 flag的值为FALSE
//如果是图片2 flag的值为TRUE
bool flag = false;
public Form1()//
{
InitializeComponent();
timer1.Interval = 1000; // 设置每隔x毫秒调用一次定时器Tick事件,单位ms
}
private void timer1_Tick(object sender, EventArgs e)
{
//当flag的值为TRUE时将图片控件的Image属性切换到Timer1.jpg
//否则将图片的Image属性切换到Timer2.jpg
if (flag)
{
pictureBox1.Image = Image.FromFile(@"E:\Programming_test\Images\8.jpg");
flag = false;
}
else
{
pictureBox1.Image = Image.FromFile(@"E:\Programming_test\Images\10.jpg");
flag = true;
}
}
private void button1_Click(object sender, EventArgs e)
{
timer1.Start(); // 启动定时器
}
private void button2_Click(object sender, EventArgs e)
{
timer1.Stop(); // 关闭定时器
}
}
}
运行效果 :
点击"启动定时器"后,图片每秒切换一次;
点击"关闭定时器"后,图片停留在当前画面;
13.4.2 异常记录
第一次使用的 8,9两张图片切换的;
但是运行到9.jpg
图片读取时,报错 :异常,内存不足
于是 手动右键导入图片9.jpg,报错:不是有效的资源类型
。
原因:图片是网络下载的,图片原来后缀时.webp
,下载时重命名修改为.jpg
,导致格式上出了问题

我们在,平时在做项目是,一定要确保图片可以被正常读入
经过尝试 8,9,图片是可以正常读入的,
cpp
if (flag)
{
pictureBox1.Image = Image.FromFile(@"E:\Programming_test\Images\8.jpg");
flag = false;
}
else
{
pictureBox1.Image = Image.FromFile(@"E:\Programming_test\Images\9.jpg");
flag = true;
}
}