timer组件是基于服务器的计时器,通过设置时间间隔interval,周期性的触发elapsed事件。
用法如下:
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上。
用法如下:
}
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。
用法
void timer_tick(object sender, eventargs e) {
i++;
test.content = i.tostring();
}
private int i = 0;
private dispatchertimer timer = new dispatchertimer();
如对本文有疑问, 点击进行留言回复!!
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
网友评论