调度计时器,UI线程上的更新很方便 - 有一个问题......它导致用户界面暂时冻结!
因此,我想在System.Timers命名空间中使用Timer,它将实现相同的功能,除了UI从不同的线程更新时响应速度更快。
System.Timers.Timer需要一个SynchronisationObject,因此我想在我的WPF窗口上实现ISynchronizeInvoke。
有人可以帮助我了解如何实施此操作,并验证我的想法是否正确。
任何帮助都将不胜感激。
答案 0 :(得分:3)
好吧,直接回答这个问题:你能不能只编写ISynchronizeInvoke
的实现,它在构造函数中接受Dispatcher
并转发所有调用? Dispatcher
API与ISynchronizeInvoke
API非常相似。
但是,我认为这不是正确的答案 - 因为给Timer
和ISynchronizeInvoke
的重点是它会用它来编组UI线程(或其他) 。那会让你和以前完全一样。大概你有想要在UI线程上执行而不是的工作......所以你不想传递ISynchronizeInvoke
。只需使用普通计时器(或.NET 4 Parallel Extensions任务等)并使用Dispatcher.Invoke
或Dispatcher.BeginInvoke
仅用于需要更新UI的时间(必须在UI线程上完成,当然)。