当前位置: 首页 > news >正文

如何用DispatcherTimer提高运行总时间的精确度

我的背景:
有两个矩形,矩形间有一条线连接,在仿真的时候要求有一个三角箭头从线的一端移动道另一端。我给定了100ms的总时间,让箭头跳跃5次。
我用DispatcherTimer,间隔100/5 = 20ms运行一次Tick事件,经测试从开始第一次到最后一次运行结束经常性的在150ms左右。即使Tick事件中什么也不做,也需要130ms。
为解决这个问题,用了多个方案,最终下面的方案时间最短,大概在105ms左右
使用 Stopwatch 精确计时
1.让DispatcherTimer间隔时间变的很短,我这里用了1ms
DispatcherTimer _timer = new(){ Interval = TimeSpan.FromMilliseconds(1) };
2.在Tick事件中应用Stopwatch来计算需要运行的步骤
var elapsedMs = _watch.Elapsed.TotalMilliseconds;//经过的毫秒
int expectedStep = (int)(elapsedMs / interval);//当前应该在第几步
if (expectedStep > _currentStep && _currentStep < simInfo.MoveCount)
{
_currentStep = expectedStep;
// do thing
if (_currentStep >= simInfo.MoveCount)
{
_timer.Stop();
//恢复部分参数
Debug.WriteLine($“仿真用时:{_watch.ElapsedMilliseconds}”);
}
}

http://www.lryc.cn/news/594955.html

相关文章:

  • AI探索 | 基于 Node.js 开发 MCP 客户端+服务端及优秀项目分享
  • Node.js- node管理工具nvm
  • Spring @RequestBody注解详解与实践
  • Dockerfile 完全指南:从入门到精通
  • 西门子 S7-1500 信号模块硬件配置全解析:从选型到实战
  • (10)机器学习小白入门 YOLOv:YOLOv8-cls 模型评估实操
  • 使用 Tailwind CSS 控制元素在移动端不显示
  • 【LuckiBit】macOS/Linux 常用命令大全
  • Jenkins pipeline触发下游流水线
  • 用Java 代码实现一个简单的负载均衡逻辑
  • 2025最新版PyCharm for Mac统一版安装使用指南
  • springcloud -- 微服务02
  • 【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
  • 【c++】leetcode438 找到字符串中所有字母异位词
  • Three.js 从零入门:构建你的第一个 Web 3D 世界
  • 小孙学变频学习笔记(十一)关于V/F曲线的讨论
  • 本地部署AI新选择!LocalAI+cpolar轻松实现隐私安全的远程访问
  • 深入解析Hadoop YARN:三层调度模型与资源管理机制
  • 星游路-个人日志-学习积累法
  • 【PTA数据结构 | C语言版】验证六度空间理论
  • Unity VR多人手术系统恢复3:Agora语音通讯系统问题解决全记录
  • Hadoop数据完整性校验机制深度解析:CRC32校验和与后台扫描线程
  • 低空经济展 | 约克科技携小型化测试设备亮相2025深圳eVTOL展
  • Spring Boot 3核心技术面试指南:从迁移升级到云原生实战,9轮技术攻防(含架构解析)
  • 树链剖分-苹果树
  • EMBMS1820芯祥科技18单元电池监控器芯片数据手册
  • 有关Spring的总结
  • 网络编程之 UDP:用户数据报协议详解与实战
  • 19.TaskExecutor与ResourceManager建立连接
  • Openlayers 面试题及答案180道(161-180)