Dea*_*uga 2 .net wpf thread-safety
在WPF4释放的 Adam Nathan中说:
大多数WPF类派生自DispatcherObject,因此本质上是线程不安全的.
专业WPF编程声称相反:
DispatcherObject是框架层次结构中的最低级别类,并且因为几乎所有对象都从它继承,所以大多数对象本质上是线程安全的
DispatcherObject上的MSDN:
只有创建Dispatcher的线程才可以直接访问DispatcherObject.要从创建DispatcherObject的线程以外的线程访问DispatcherObject,请在与DispatcherObject关联的Dispatcher上调用Invoke或BeginInvoke.
基于MSDN描述看起来像WPF4 Unleashed引用是一个错字或Nathan是错的,专业WPF编程作者是对的...
无论如何,继承自DispatcherObject的类本身就是线程安全的还是固有的线程不安全的?
编辑:
MSDN还声明:
需要强制执行线程安全的DispatcherObject子类可以通过对所有公共方法调用VerifyAccess来实现.这可以保证调用线程是创建DispatcherObject的线程.
这间接证实了WPF4 Unleashed声明毕竟是准确的......
这取决于您对线程安全的意思,但我赞成WPF4 Unleashed的视图 - 基于MSDN描述.
文档说你只能访问DispatcherObject特定线程的成员- 因此从任意线程使用它是不安全的.这对我来说听起来像是一个线程不安全的类型.
在另一方面,你可以考虑,如果DispatcherObject正确使用,代码中的类没有采取线程安全考虑,因为它应该只由一个线程调用.
所以在某种意义上说它是"从外部线程不安全,从内部线程安全".我更喜欢使用更具描述性的术语:类具有线程亲和性.
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |