原文:WinForm LED循环显示信息,使用定时器Threading.Timer

这里用一个示例来演示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 = ;

//每页显示行数 范围1-5
static int _pagerowcount = ;

//每行固定显示5个
static int _pagerownumber = ;

//总页数
static int _pagetotal = ;

//当前页
static int _pageindex = ;

static int _rowindex = ;

//获取正在处理列表
private static IList<string> _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, , _timespan);
}

private void ThreadMethod(object state)
{
if (this.InvokeRequired)
this.Invoke(_settlpnamelist);
}

/// <summary>
/// 设置正在处理列表
/// </summary>
private void LoadLEDForm()
{
SetQueueOrder();
SetName();
SetNameList();
}
/// <summary>
/// 设置等待列表
/// </summary>
private void SetNameList()
{
if (_pageindex == )
{
GetNameList();
_pagetotal = (int)Math.Ceiling((float)_namelist.Count / (_pagerowcount * _pagerownumber));

if (_pagetotal < ) { _pagetotal = ; }
}
if (_namelist != null && _namelist.Count > )
{
int column = ;
tlpaNameList.Controls.Clear();
_rowindex = ;
int i = ;
int startIndex = (_pageindex - ) * (_pagerowcount * _pagerownumber);
int endIndex = _pageindex * (_pagerowcount * _pagerownumber);
for (; i < _namelist.Count; i++)
{
if (i >= startIndex && i < endIndex)
{
if (_rowindex > _pagerowcount - )
break;
if (column > _pagerownumber - )
{
column = ;
_rowindex++;
}
Addlabel(_namelist[i], column);
column++;
}
}
lblPageNumber.Text = string.Format("页码 {0}/{1}", _pageindex, _pagetotal);
_pageindex++;
if (_pageindex > _pagetotal)
{
_pageindex = ;
}
}
}

/// <summary>
/// 设置排队叫号
/// </summary>
private void SetQueueOrder()
{
lblOrder.Text = _pageindex + " 号";
}

/// <summary>
/// 设置催缴费
/// </summary>
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);
}

/// <summary>
/// 模拟一个列表(列表中有30个对象),每个列表显示完成后,自动新增一个对象,用来模拟等待列表的人数在增加
/// </summary>
public void GetNameList()
{
if (_namelist == null || _namelist.Count < )
{
_namelist = new List<string>();
for (int i = ; i < ; i++)
{
_namelist.Add("唐鑫瑞" + i);
}
}
else
{
if (_pageindex == )
_namelist.Add("唐鑫瑞" + (_namelist.Count + ));
}
}

private void FormTimer_Load(object sender, EventArgs e)
{

}
}
}

显示结果如下图:

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

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

WinForm LED循环显示信息,使用定时器Threading.Timer的更多相关文章

  1. python中的定时器threading.Timer

    由浅入深学SQL Server 2012 --> python开发中用到,定时操作.例如每隔1s执行一次,发现  threading.Timer,这个东西,可以直接用. 其原理为执行函数中置定时 ...

  2. Winform中ListView鼠标移动使用toolTip显示信息

    今天在做一个酒店管理系统的时候用到了ListView,突然想到是否能够当鼠标移动到某一项的时候给出具体房间的信息呢! 首先设置Listview的MouseMove事件 1.获取当前坐标的项 ListV ...

  3. System.Threading.Timer 定时器的用法

    System.Threading.Timer 是C# 中的一个定时器,可以定时(不断循环)执行一个任务.它是在线程上执行的,具有很好的安全性.为此  .Net Framework 提供了5个重载的构造 ...

  4. C# 使用winForm的TreeView显示中国城镇四级联动

    直接上代码吧,这里 MySql.Data.MySqlClient;需要到mysql官网下载mysql-connector-net-6.9.8-noinstall.zip   访问密码 6073 usi ...

  5. wpf image控件循环显示图片 以达到动画效果 问题及解决方案

    1>最初方案: 用wpf的image控件循环显示图片,达到动画效果,其实就是在后台代码动态改变Image.Source的值,关键代码: ; i < ; i++)//六百张图片 { Bitm ...

  6. QT中循环显示图片和简单的显示图片

    请关注我的github https://github.com/linqiaozhou 以下实例代码不久后将会上传到我的github 这是我最近一个项目中的部分代码 //以下是简单的在QT中显示图片的代 ...

  7. ArcGIS api for javascript——加载查询结果,悬停显示信息窗口

    转自原文 ArcGIS api for javascript——加载查询结果,悬停显示信息窗口 描述 本例在开始和地图交互前执行一个查询任务并加在查询结果.这允许用户鼠标悬停在任意郡县时立即见到Inf ...

  8. ArcGIS api for javascript——鼠标悬停时显示信息窗口

    描述 本例展示当用户在要素上悬停鼠标时如何显示InfoWindow.本例中,要素是查询USA州图层的QueryTask的查询结果.工作流程如下: 1.用户单击一个要素 2.要素是“加亮的”图形. 3. ...

  9. 11月10日下午 ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情

    1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...

随机推荐

  1. 什么是流利语法Fluent Syntax

     出处:http://blog.csdn.net/u010019717 author:孙广东      时间:2015.3.18   23:00 编程新概念:什么是流利语法fluent synta ...

  2. VMWare网络设置的3中方式(转)

    一 VMware网络设置的三种方式 1 Host-only连接方式  让虚机具有与宿主机不同的各自独立IP地址,但与宿主机位于不同网段,同时为宿主主机新增一个IP地址,且保证该IP地址与各虚机IP地址 ...

  3. Atitit.列表页and查询条件的最佳实践(1)------设定搜索条件and提交查询and返回json数据

    Atitit.列表页and查询条件的最佳实践(1)------设置查询条件and提交查询and返回json数据 1. 1. 配置条件字段@Conditional 1 1 2. 2. 配置条件字段显示类 ...

  4. RH033读书笔记(2)-Lab 3 Getting Help with Commands

    Lab 3 Getting Help with Commands Sequence 1: Using the Help Tools 1. man -f keyword whatis keyword l ...

  5. 大约apache 2.4.X虚拟主机配置问题的版本号后,

    重装系统,习惯性下载最新的wamp2.5,在各种配置,然后一切正常反应.数据库,代码. 然后打开浏览器,尼嘛,幸运的是,昨天,与虚拟域,其实403该. apache error log的信息是:AH0 ...

  6. Windows下效率必备软件

    AutoHotKey: 神器!神器!神器!当然也得看使用者咯(^__^) 嘻嘻…… Listary: 本地搜索神器,当然还有别的作用,More&More. Launchy : 快速启动安装的应 ...

  7. WebService 简单安全验证

    原文:WebService 简单安全验证 最近新接了一个需要调用第三方WebService的项目,看到这个第三方WebService被调用的时候,需要授权用户名和密码,于是自己也想对WebServic ...

  8. System.Threading.ThreadStateException

    异常:"System.Threading.ThreadStateException"在未处理的异常类型 System.Windows.Forms.dll 发生 其它信息: 在能够调 ...

  9. C语言探索之旅】 第一部分第四课第三章:变量的世界之显示变量内容

    内容简介 1.课程大纲 2.第一部分第四课第三章:变量的世界之显示变量内容 3.第一部分第五课预告:基本运算 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用 ...

  10. H. 硬币的水问题II

    H. 硬币水题II Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: ...