我有一個VB.Net和WPF應用程序。應用程序的一部分使用「圖像生成器」來計算圖像。另一個是使用「計時器」來顯示直方圖。當使用發生器創建每秒約2幀時,CPU大約爲零用量,圖像創建正常並且直方圖將在Timer中創建,全部爲1秒。所有似乎都是完美的。爲什麼System.Windows.Threading.DispatcherTimer不觸發事件?
如果我讓我用自己的「圖像生成器」計算圖像大約20 FPS,而不是隻有2,CPU會上升到20%,但計時器永遠不會拋出一個事件。 GUI中的圖像顯示20FPS。如果我停止圖像生成器,則立即觸發其事件。
我不知道從哪裏開始搜索。
Me.TimerCalc = New System.Windows.Threading.DispatcherTimer
Me.TimerCalc.Interval = TimeSpan.FromMilliseconds(1000)
Me.TimerCalc.Start
Private Sub TimerCalc_Tick(sender As Object, e As System.EventArgs) Handles TimerCalc.Tick
'Does not fire if other process is running by using more CPU
End Sub
如果我降低幀率10FPS左右,有時DispatcherTimer拋出他的事件,somethimes沒有。如果我增加幀率,DispatcherTimer將會拋出更少的事件。
編輯 下載演示項目位置:VisualStudio 2010 Dispatcher Test with Windows Form Timer
編輯 視頻演示在這裏上傳:Video where cube does not rotate anymore
理解消息循環是Windows GUI編程的基礎。在您的代碼閒置之前,Tick不會觸發。 – 2011-05-17 19:31:10