我有一个查询,在Winform(UI线程)控件中调用是否有处理跨线程问题,那么为什么在WPF中引入了Dispatcher? Dispatcher的其他优点是什么?
请帮我理解这一点。
答案 0 :(得分:3)
WPF中引入Dispatcher
的主要原因是WPF不是WinForms和WinForms类成员与WPF对象无关。他们必须做某事。
Microsoft是否可以像WinForms一样实现WPF?当然。但WPF是一种根本不同的API,有意义的是他们会利用这个机会重新设计处理编写任何Windows软件时自然发生的线程关联的范例,无论是托管还是其他方式。
请注意,WPF,特别是Dispatcher,是比WinForms及其Invoke()
方法更高级的抽象。应用程序对Dispatcher
的控制比对Invoke()
的WinForms程序更多。 Dispatcher
支持不同的优先级,甚至支持可以安全地在不同线程中使用的DispatcherObject
的例外(参见Freezable
)。
在一天结束时,WPF的Dispatcher
与WinForm的Invoke()
方法做的工作大致相同。它只是有点闪亮,为实现相同的基本目标提供了更多细致入微的机制。