我正在使用計時器來滾動列表。每發生一個毫秒的時間間隔,我都會啓動Tick事件。儘管動畫看起來非常緩慢。計時器速度問題WPF
repeatTimer_Tick(this, new EventArgs());
repeatLeftTimer.Interval = TimeSpan.FromMilliseconds(1);
repeatLeftTimer.Tick += new EventHandler(repeatTimer_Tick);
我正在使用計時器來滾動列表。每發生一個毫秒的時間間隔,我都會啓動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