该类System.Windows.Threading.DispatcherObject
(DependencyObject
基于)包含一个有用的函数,称为CheckAccess()
,它确定代码是否在 UI 线程上运行。
当我昨天想使用它时,我很困惑地发现 Intellisense 没有显示该功能(也VerifyAccess()
没有在 UI 线程上时抛出异常),即使 MSDN 库列出了它。我决定使用 Reflector 来研究这门课。似乎有问题的函数EditorBrowsable(EditorBrowsableState.Never)
附加了一个属性。由 使用的Dispatcher
类DispatcherObject
具有附加到CheckAccess()
和的相同属性VerifyAccess()
:
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 中一些最有用的方法)?