Timer(System.Timers) 和 DispatcherTimer

Timer组件是基于服务器的计时器,通过设置时间间隔Interval,周期性的触发Elapsed事件。

用法如下:

    class Program {static System.Timers.Timer Timer1 = new System.Timers.Timer();static void Main() {
Timer1.Interval = 1000;
Timer1.Elapsed += new ElapsedEventHandler(PeriodicTaskHandler);            
Timer1.Start();
Console.ReadLine();
}

static void PeriodicTaskHandler(object sender, ElapsedEventArgs e) {string str =Thread.CurrentThread.ManagedThreadId.ToString()+"##" +"Timer1" +"##" + e.SignalTime.ToLongTimeString();
Console.WriteLine(str);
}
}

 

DispatcherTimer:Dispatcher队列中的计时器,不能保证正好在设置的时间间隔发生时执行计时器,但能保证不会在时间间隔发生之前执行计时器。这是因为  DispatcherTimer的操作也是放置在Dispatcher队列中的,何时执行DispatcherTimer操作取决于队列中其他作业及其优先级。

在WPF应用程序中

Timer的Elapsed事件绑定的方法没有运行在UI线程上,如果要访问UI线程上的对象,需要利用Invoke或BeginInvoke 将操作发布到UI线程的Dispatcher上。

用法如下

private void Button_Click(object sender, RoutedEventArgs e) {
Timer timer = new Timer();
timer.Interval = 1000;
timer.Start();
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);

}

void timer_Elapsed(object sender, ElapsedEventArgs e) {
i++;this.Dispatcher.Invoke(new Action(() => {
test.Content = i.ToString();
}));
}

private int i = 0;

 

DispatcherTimer与Dispatcher都运行于相同的线程,并且可以在DispatcherTimer上设置DispatcherPriority。

用法

private void Button_Click(object sender, RoutedEventArgs e) {
timer.Interval = TimeSpan.FromMilliseconds(1000);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}

void timer_Tick(object sender, EventArgs e) {
i++;
Test.Content = i.ToString();
}

private int i = 0;private DispatcherTimer timer = new DispatcherTimer();

详细代码:DownLoad

作者:绿茶叶 
出处:http://www.cnblogs.com/greenteaone/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/greenteaone/archive/2012/01/05/2313107.html

时间: 2024-11-06 08:09:53

Timer(System.Timers) 和 DispatcherTimer的相关文章

System.Windows.Forms.Timer与System.Timers.Timer的区别

.NET Framework里面提供了三种Timer: System.Windows.Forms.Timer System.Timers.Timer System.Threading.Timer VS.Net 2005默认只有一个Timer控件,但那是System.Forms.Timer控件.如果要使用System.Timers.Timer的控件,需要在工具箱上单击右键,手动添加. 添加的步骤:工具箱单击右键->Add Item->找到命名空间是System.Timers.Timer的控件,将

在WinForm,自定义类中添加 System.Timers.Timer控件,为什么不能正常进行

问题描述 在自定义类中加入System.Timers.Timertimergamebegin;System.Timers.Timertimersendpoker;在构造函数中:publicMyClass(){this.timergamebegin=newSystem.Timers.Timer(Desk.addpointtimes*1000);timergamebegin.Elapsed+=newSystem.Timers.ElapsedEventHandler(this.timergamebeg

asp.net中System.Timers.Timer的使用方法_javascript技巧

我们经常会在网站中加一些定时执行的任务,比如生成静态页.执行邮件发送等. 可以通过在Global.asax中这样设置来实现.   复制代码 代码如下: void Application_Start(object sender, EventArgs e)     {                // 在应用程序启动时运行的代码        System.Timers.Timer MT = new System.Timers.Timer();      MT.Enabled = true;   

ui-C# 中System.Timers.timer 如何通知UI线程

问题描述 C# 中System.Timers.timer 如何通知UI线程 string ss=""; private void Form1_Load(object sender, EventArgs e) { timer.Elapsed += new System.Timers.ElapsedEventHandler(timerControl); timer.Interval = 5000; timer.AutoReset = true; timer.Enabled = true;

在WebForm中,使用 System.Timers.Timer向页面定时发送内容(Response.Write(DateTime.Now);)报错。

问题描述 最近朋友有需求就是在C#中做定时器,我用控制台给他写的,没有问题.然后我就把代码拿到webform中试试,定时器调用没有问题,但是不能向页面输出内容,在网上查询说用:System.Web.HttpContext.Current.Response.Write();,但是也报错.代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Web.UI;usingS

system.timers.timer执行问题。

问题描述 我的代码如下.我只设置一个timer1数组,但执行出来却有两个结果.执行结果为[0]+当前时间,[1]+当前时间,我希望的结果为[0]+当前时间就可以了,后面[1]+当前时间是怎么来的?privatevoidstart_Click(objectsender,EventArgse){StartProcc();}///<summary>///启动程序///</summary>privatevoidStartProcc(){ArrayListurl=newArrayList()

关于C#中System.Timers.Timer的问题

问题描述 用System.Timers.Timertime=newSystem.Timers.Timer()定义了一个time,然后用语句time.Elapsed+=newElapsedEventHandler(time_Elapsed);Elapsed触发事件time_Elapsed,但time_Elapsed事件中写之前定义的函数,就会出现这样的错误:非静态的字段.方法或属性"boxing_.Form1.ReadDataOnetime()"要求对象引用请问,应该怎样解决? 解决方案

System.Timers.Timer定时执行程序示例代码_实用技巧

System.Timers.Timer 定时执行程序 复制代码 代码如下: System.Timers.Timer t = new System.Timers.Timer(5000); //设置时间间隔为5秒 private void Form1_Load(object sender, EventArgs e) { t.Elapsed += new System.Timers.ElapsedEventHandler(Timer_TimesUp); t.AutoReset = false; //每

解析.NET中几种Timer的使用_C#教程

这篇博客将梳理一下.NET中4个Timer类,及其用法. 1. System.Threading.Timer public Timer(TimerCallback callback, object state, int dueTime, int period); callback委托将会在period时间间隔内重复执行,state参数可以传入想在callback委托中处理的对象,dueTime标识多久后callback开始执行,period标识多久执行一次callback. using Syst