博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinForm LED循环显示信息,使用定时器Threading.Timer
阅读量:5818 次
发布时间:2019-06-18

本文共 4651 字,大约阅读时间需要 15 分钟。

这里用一个示例来演示timer如何使用。

示例:LED屏幕显示
描述:这个示例其实很简单,LED屏幕上显示3个信息:
        1:排队叫号
        2:催缴费
        3:等待列表。因为LED屏幕大小的关系,列表需要分页显示。

        正常情况下,这3个信息都需要从服务器上去获得,这里的示例只做简单的模拟,

        界面很简单,如图,这里我就不美化了。        

 

Timer构造函数参数说明:
Callback:一个 TimerCallback 委托,表示要执行的方法。
State:一个包含回调方法要使用的信息的对象,或者为空引用(Visual Basic 中为 Nothing)。
dueTime:调用 callback 之前延迟的时间量(以毫秒为单位)。指定 Timeout.Infinite 以防止计时器开始计时。指定零 (0) 以立即启动计时器。
Period:调用 callback 的时间间隔(以毫秒为单位)。指定 Timeout.Infinite 可以禁用定期终止。
 

程序代码如下:

using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using System.Threading; namespace WindowsFormsThreading {
public partial class FormTimer : Form {
//线程暂停时间 单位:毫秒 static int _timespan = 2000; //每页显示行数 范围1-5 static int _pagerowcount = 4; //每行固定显示5个 static int _pagerownumber = 5; //总页数 static int _pagetotal = 0; //当前页 static int _pageindex = 1; static int _rowindex = 0; //获取正在处理列表 private static IList
_namelist; //声明定时器 private static System.Threading.Timer _timer; //定义委托 private delegate void SetTLPNameListDelegate(); //声明委托变量 private SetTLPNameListDelegate _settlpnamelist; public FormTimer() {
InitializeComponent(); _settlpnamelist = LoadLEDForm;//设置委托变量的方法 BeginTimer(); } private void BeginTimer() {
//TimerCallback 委托,指定timer定时器需要执行的方法 ThreadMethod TimerCallback tmrcallback = new TimerCallback(ThreadMethod); //示例化定时器 _timer = new System.Threading.Timer(tmrcallback, null, 0, _timespan); } private void ThreadMethod(object state) {
if (this.InvokeRequired) this.Invoke(_settlpnamelist); } ///
/// 设置正在处理列表 /// private void LoadLEDForm() {
SetQueueOrder(); SetName(); SetNameList(); } ///
/// 设置等待列表 /// private void SetNameList() {
if (_pageindex == 1) {
GetNameList(); _pagetotal = (int)Math.Ceiling((float)_namelist.Count / (_pagerowcount * _pagerownumber)); if (_pagetotal < 1) { _pagetotal = 1; } } if (_namelist != null && _namelist.Count > 0) {
int column = 0; tlpaNameList.Controls.Clear(); _rowindex = 0; int i = 0; int startIndex = (_pageindex - 1) * (_pagerowcount * _pagerownumber); int endIndex = _pageindex * (_pagerowcount * _pagerownumber); for (; i < _namelist.Count; i++) {
if (i >= startIndex && i < endIndex) {
if (_rowindex > _pagerowcount - 1) break; if (column > _pagerownumber - 1) {
column = 0; _rowindex++; } Addlabel(_namelist[i], column); column++; } } lblPageNumber.Text = string.Format("页码 {0}/{1}", _pageindex, _pagetotal); _pageindex++; if (_pageindex > _pagetotal) {
_pageindex = 1; } } } ///
/// 设置排队叫号 /// private void SetQueueOrder() {
lblOrder.Text = _pageindex + " 号"; } ///
/// 设置催缴费 /// private void SetName() {
lblName.Text = "唐鑫瑞" + _pageindex; } private void Addlabel(String text, int columnindex) {
Label label = new Label(); label.Dock = DockStyle.Top; label.ForeColor = Color.Yellow; label.BackColor = Color.Black; label.Font = new System.Drawing.Font("宋体", 12F); label.Text = text; label.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; tlpaNameList.Controls.Add(label, columnindex, _rowindex); } ///
/// 模拟一个列表(列表中有30个对象),每个列表显示完成后,自动新增一个对象,用来模拟等待列表的人数在增加 /// public void GetNameList() {
if (_namelist == null || _namelist.Count < 1) {
_namelist = new List
(); for (int i = 1; i < 31; i++) {
_namelist.Add("唐鑫瑞" + i); } } else {
if (_pageindex == 1) _namelist.Add("唐鑫瑞" + (_namelist.Count + 1)); } } private void FormTimer_Load(object sender, EventArgs e) {
} } }

显示结果如下图:

因为我这里模拟等待列表的人数在增加,所以 在第4次刷新显示的时候会增加一人,(初始30人)

这样一直刷新显示下去,人数会越来越多,页码就会超过2页,如下图

转载于:https://www.cnblogs.com/springSky/archive/2012/03/15/2398000.html

你可能感兴趣的文章
Cocos2dx 3.0开发环境的搭建--Eclipse建立在Android工程
查看>>
基本概念复习
查看>>
重构第10天:提取方法(Extract Method)
查看>>
Android Fragment使用(四) Toolbar使用及Fragment中的Toolbar处理
查看>>
解决pycharm在ubuntu下搜狗输入法一直固定在左下角的问题
查看>>
“Info.plist” couldn’t be removed
查看>>
多线程day01
查看>>
react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
查看>>
MySQL出现Access denied for user ‘root’@’localhost’ (using password:YES)
查看>>
通过Roslyn构建自己的C#脚本(更新版)(转)
查看>>
红黑树
查看>>
UIImagePickerController拍照与摄像
查看>>
python调用windows api
查看>>
Linux内核中的printf实现【转】
查看>>
第四章 mybatis批量insert
查看>>
Java并发框架——什么是AQS框架
查看>>
【数据库】
查看>>
Win配置Apache+mod_wsgi+django环境+域名
查看>>
第四届中国汽车产业信息化技术创新峰会将于6月在沪召开
查看>>
linux清除文件内容
查看>>