C#中的Timer和DispatcherTimer使用实例
- 作者: 日醒已散
- 来源: 51数据库
- 2021-11-10
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#通过fleck实现wss协议的WebSocket多人Web实时聊天(附源码)
- 团队城市未满足要求:MSBuildTools12.0_x86_Path 存在
- 使用 MSBuild.exe 在发布模式下构建 C# 解决方案
- 当我发布 Web 应用程序时,AfterPublish 脚本不运行
- 构建时 T4 转换的产品仅在下一个构建中使用
- ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json
- 新的 .csproj 格式 - 如何将整个目录指定为“链接文件"到子目录?
- 如何将条件编译符号(DefineConstants)传递给 msbuild
- MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板
- NuGet 包还原找不到包,没有源









