计时器速度问题WPF
我正在使用计时器来滚动列表。每发生一个毫秒的时间间隔,我都会启动Tick事件。尽管动画看起来非常缓慢。计时器速度问题WPF
repeatTimer_Tick(this, new EventArgs());
repeatLeftTimer.Interval = TimeSpan.FromMilliseconds(1);
repeatLeftTimer.Tick += new EventHandler(repeatTimer_Tick);
Windows中的计时器有几毫秒的分辨率,IIRC,10个50毫秒之间的事情。你不能让普通定时器每毫秒打勾。
有没有解决方案? – Geeth 2011-05-02 09:37:28
我认为计时器分辨率最好是13ms。这是〜75fps。你的动画真的需要超过75fps吗?如果您必须使用计时器设置动画,则使用增量计算前一帧与动画之间的增量值。 – 2011-05-02 09:39:54
我认为最简单的方法是使用'BackgroundWorker',在'ProgressChanged'事件处理程序中滚动你的列表框,并在'Sleep(1000)'循环中调用'yourWorker.ReprotProgress' ... – 2011-05-02 09:41:09
你有两个很好的和(相对)容易选择:
使用动画 - WPF有一个非常通用的动画系统,它很可能是能够做你所需要的。
使用CompositionTarget.Rendering事件,尽可能快地调用这些事件(每帧),并且每次调用都需要负责根据当前时间设置当前状态(即内置动画的工作方式)
如果您需要高分辨率,那么我建议您查看Stopwatch类。使用“频率”字段和ElapsedTicks属性来获取您正在查找的分辨率。请注意,秒表的分辨率将根据硬件而改变。阅读msdn文档的链接以获取更多信息。
我会尝试使用你正在做的动画。
.NET定时器类通常具有15.6 ms的最小间隔。如果您需要更快的增量(降至1毫秒),则Windows会在非托管API中提供多媒体计时器。你可以导入这个计时器并使用它 - 我已经完成了,它可以工作。
我根据我的代码断这样的:http://www.codeproject.com/KB/miscctrl/lescsmultimediatimer.aspx
应该是你最需要的东西;我添加了一些代码来观察高分辨率定时器并观察刻度之间的时间 - 我能够达到1ms,+ = 0.10 ms
是WPF还是ASP.NET?这些技术不能一起工作,包括两个标签都没有意义... – 2011-05-02 09:28:55