本文要实现的功能,是使用C#语言自动刷新页面。这个功能使用Timer可以很容易地实现。这里需要实现的自动刷新功能,要求可以从指定的几种选项里自由设置自动刷新的时间间隔。
我实现的效果如下图,这个DEMO定时刷新的是中间Label内文字的字体。
实现这一功能,要考虑到如下几个方面:
1、这些选项最好可以在代码中以非常简便的方式添加,如构造一个函数,而不是在拉界面的时候手工添加,并逐一设置事件。如果手工添加事件,会造成每次增加或减少一个时间选项时,都要对其他所有选项的事件进行修改(至少各选项Checked属性的true和false会改)
2、用一个计时器来进行刷新时,“不启用”这个选项比较特殊,该选项只需要关闭计时器即可,其他的时间间隔选项都是先把计时器停掉,修改时间间隔后再将计时器打开
3、根据个人偏好(或业务需求),可以设定在每次变化自动刷新时间间隔后是否立即刷新一次,我的例子中,每次变化时间间隔后(选择“不启用”时除外),会立即刷新一次
界面上的控件如下:
窗体内代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace RefreshTimelyDemo
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
string[] font = new[]
{
"宋体", "仿宋", "黑体", "微软雅黑", "幼圆", "隶书", "楷体",
"华文新魏", "华文琥珀", "华文行楷", "华文彩云", "方正姚体", "方正舒体"
};
/// <summary>
/// 自动刷新时间间隔项
/// </summary>
LinkedList<ToolStripMenuItem> items = new LinkedList<ToolStripMenuItem>();
/// <summary>
/// 随机数种子
/// </summary>
Random random = new Random(DateTime.Now.Millisecond);
/// <summary>
/// 自动刷新计时器
/// </summary>
Timer timer = new Timer();
private void Form1_Load(object sender, EventArgs e)
{
ToolStripMenuItem tsmiNone = new ToolStripMenuItem("不启用");
tsmiNone.Click += (obj, arg) =>
{
foreach (ToolStripMenuItem item in items)
{
item.Checked =
item.GetHashCode() == tsmiNone.GetHashCode() ? true : false;
}
timer.Stop();
};
items.AddLast(tsmiNone);
btnRefreshConfig.DropDownItems.Add(tsmiNone);
btnRefreshConfig.DropDownItems.Add(new ToolStripSeparator());
AddRefreshOption("500毫秒", 500);
AddRefreshOption("1秒", 1000);
AddRefreshOption("5秒", 5000);
btnRefreshConfig.DropDownItems.Add(new ToolStripSeparator());
AddRefreshOption("1分钟", 60000);
AddRefreshOption("5分钟", 300000);
AddRefreshOption("30分钟", 1800000);
tsmiNone.Checked = true;
timer.Tick += (obj, arg) =>
{
RefreshFont();
};
}
/// <summary>
/// 更新数据
/// </summary>
private void RefreshFont()
{
int num = random.Next(0, font.Length);
lblText.Font = new Font(font[num], lblText.Font.Size);
lblFontName.Text = font[num];
}
/// <summary>
/// 添加刷新项
/// </summary>
/// <param name="text"></param>
/// <param name="interval"></param>
private void AddRefreshOption(string text, int interval)
{
ToolStripMenuItem tempItem = new ToolStripMenuItem(text);
tempItem.Click += (obj, arg) =>
{
foreach (ToolStripMenuItem item in items)
{
item.Checked =
item.GetHashCode() == tempItem.GetHashCode() ? true : false;
}
timer.Stop();
timer.Interval = interval;
RefreshFont();
timer.Start();
};
items.AddLast(tempItem);
btnRefreshConfig.DropDownItems.Add(tempItem);
}
/// <summary>
/// 手动刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRefresh_Click(object sender, EventArgs e)
{
RefreshFont();
}
/// <summary>
/// 窗口退出前关闭计时器
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
{
timer.Stop();
}
}
}
END