Winfrom中有3种定时器的用法 1、基于控件的定时器 : System.Windows.Forms.Timer winfrom控件 2、基于线程控制的定时器 : System.Threading.Timer 基于线程 3、基于服务控制的定时器 : System.Timers.Timer 基于服务 区别: 1、基于控件的定时器 是独占一个线程的 可以修改UI元素 使用Winfrom程序(首选) 缺点:在Tick事件里面不能加载太多数据 会出现堵塞现象 导致下次触发 以及其他控件 2、基于线程的定时器 不能直接修改UI元素,要通过委托的方法来修改UI元素 优点:时间过长,也不会失去响应,不会影响下一次事件的触发 主要事件:Winfrom中的定时器 (Tick事件) 线程中的定时器(Elapsed事件) 常用属性:控件.Enabled=false;//不启用定时器
控件.Interval=1000;//触发的时间 1000毫秒=1秒 主要代码:
Winfrom的定时器:
开启加载:
lblTime.Text = "当前时间为:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//获取当前时间
DTime.Enabled = true;
在Tick事件中触发界面显示
lblTime.Text = "当前时间为:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
线程定时器:
在加载界面中手动创建一个委托定时器
System.Timers.Timer timer1 = new System.Timers.Timer();//手动创建一个线程定时器
timer1.Interval = 1000;//定时时间设置为1秒
timer1.Elapsed += timer1_Elapsed;
timer1.Start();
----------------------------------------------
int count=0;//设置定时的次数
----------------------------------------------
在线程定时器的Elapsed事件中的
count += 1;
#region 修改UI元素 通过一个委托方法 来实现UI元素控制
Action act = UpdataTime;//调用一个委托
this.Invoke(act); //通过Invoke()完成 修改UI元素 --通过委托来修改UI元素
#endregion
if (count > 10)
{
System.Timers.Timer timer = (System.Timers.Timer)sender;
timer.Stop();//停止
}
委托方法:
private void UpdataTime()//定义一个委托
{
lblDt1.Text = DateTime.Now.ToString();
}
主要代码图: