我有一个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