在我的WPF应用程序中,我使用了3种不同的DispatcherTimers。
当我的程序运行时,有很多延迟/冻结。 例如,时间开始正确滴答,但突然间值冻结,冻结后时间增加+3秒。
我在整个应用程序中遇到此行为。 用几个计时器解决这个问题的正确方法是什么?
编辑:
我在使用System.Timers命名空间中的Timer替换DispatcherTimer时遇到问题。
//new code with timer
timerW = new Timer();
timerW.Elapsed += new ElapsedEventHandler(timerWegingen_Tick);
timerW.Interval = 5000;
timerW.Start();
//OLD Working Code
timerW = new DispatcherTimer();
timerW.Tick += new EventHandler(timerWegingen_Tick);
timerW.Interval = new TimeSpan(0, 0,5);
timerW.Start();
错误:“调用线程必须是STA,因为许多UI组件都需要这个。”
最好的问候。
答案 0 :(得分:3)
DispatcherTimer在UI线程上执行。因此,如果UI线程忙于超过间隔,则在UI线程可以自由执行时执行。 如果您需要更精确的调度,则应该花费一些时间而不是在后台运行(System.Threading.Timer,System.Timers.Timer)。但是不要忘记当时的编组。
HTH, 马丁
答案 1 :(得分:0)
我想这是因为它们都在同一个线程上运行。
答案 2 :(得分:0)
使用System.Threading.Timer并在更新UI时使用SyncronizationContext.Syncronize来运行更新代码。
不要忘记在UI线程上从SyncronizationContext.Current获取上下文。