【发布时间】:2010-09-06 06:14:18
【问题描述】:
System.Windows.Threading.DispatcherObject 类(DependencyObject 的基础)包含一个有用的函数,称为 CheckAccess(),它确定代码是否在 UI 线程上运行。
昨天想用的时候,疑惑的发现Intellisense并没有显示该功能(也没有VerifyAccess(),不在UI线程上时会抛出异常),尽管MSDN库列出了它.我决定使用 Reflector 来研究这门课。似乎有问题的函数附加了一个EditorBrowsable(EditorBrowsableState.Never) 属性。 DispatcherObject 使用的Dispatcher 类与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 中一些最有用的方法)?
【问题讨论】:
标签: .net-3.5 intellisense