WPF窗口实现ISynchronizeInvoke以与System.Timers.Timer一起使用

时间:2010-09-07 06:03:38

标签: wpf multithreading timer

调度计时器,UI线程上的更新很方便 - 有一个问题......它导致用户界面暂时冻结!

因此,我想在System.Timers命名空间中使用Timer,它将实现相同的功能,除了UI从不同的线程更新时响应速度更快。

System.Timers.Timer需要一个SynchronisationObject,因此我想在我的WPF窗口上实现ISynchronizeInvoke。

有人可以帮助我了解如何实施此操作,并验证我的想法是否正确。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

好吧,直接回答这个问题:你能不能只编写ISynchronizeInvoke的实现,它在构造函数中接受Dispatcher并转发所有调用? Dispatcher API与ISynchronizeInvoke API非常相似。

但是,我认为这不是正确的答案 - 因为给TimerISynchronizeInvoke的重点是它会用它来编组UI线程(或其他) 。那会让你和以前完全一样。大概你有想要在UI线程上执行而不是的工作......所以你不想传递ISynchronizeInvoke。只需使用普通计时器(或.NET 4 Parallel Extensions任务等)并使用Dispatcher.InvokeDispatcher.BeginInvoke仅用于需要更新UI的时间(必须在UI线程上完成,当然)。