C#中的Timer和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();
推荐阅读
-
C#中的Timer和DispatcherTimer使用实例
-
详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用
-
C#中的Timer和DispatcherTimer使用实例
-
C# 中SharpMap的简单使用实例详解
-
C#使用SQL DataReader访问数据的优点和实例
-
C#中通过使用Connection类来实现打开/关闭数据库的代码实例
-
详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用
-
SQL Server中调用C#类中的方法实例(使用.NET程序集)
-
C#中的Linq Intersect与Except方法使用实例
-
python中的hashlib和base64加密模块使用实例