这个
System.Windows.Threading.DispatcherObject
类(其中
DependencyObject
基于)包含一个有用的函数,称为
CheckAccess()
,它确定代码是否在UI线程上运行。
当我昨天想使用它时,我困惑地发现Intellisense没有显示该功能(也没有
VerifyAccess()
,当不在UI线程上时会抛出异常),即使MSDN库列出了它。我决定使用Reflector调查该类。似乎该功能具有
EditorBrowsable(EditorBrowsableState.Never)
附加到它的属性
Dispatcher
类,由使用
DispatcherObject
,具有附加到的相同属性
CheckAccess()
和
验证访问()
:
public abstract class DispatcherObject
{
// ...
[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess();
[EditorBrowsable(EditorBrowsableState.Never)]
public void VerifyAccess();
// ...
[EditorBrowsable(EditorBrowsableState.Advanced)]
public Dispatcher Dispatcher { get; }
}
public sealed class Dispatcher
{
// ...
[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess();
[EditorBrowsable(EditorBrowsableState.Never)]
public void VerifyAccess();
// ...
}
我不认为该属性的应用是随机的(或开玩笑的),所以我的问题是:为什么会有它?这些方法不应该直接调用吗?那他们为什么不呢
protected
(或
internal
,就像WPF中一些最有用的方法一样)?