代码之家  ›  专栏  ›  技术社区  ›  friedo

为什么是DispatcherObject。CheckAccess()和VerifyAccess()隐藏在Intellisense中?

  •  22
  • friedo  · 技术社区  · 17 年前

    这个 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中一些最有用的方法一样)?

    2 回复  |  直到 17 年前
        1
  •  8
  •   Judah Gabriel Himango    17 年前

    微软员工 recently stated CheckAccess仅用于“高级场景”,因此他们对Intellisense隐藏了它。

    “CheckAccess和VerifyAccess具有 总是被标记为不可见, 也许智能感知不尊重 您可以使用Reflector进行确认。 这里的想法是CheckAccess和 VerifyAccess是高级场景, 这是普通开发人员不需要的。

    然而,我确实认为 编辑器可浏览状态。先进的将 已经达到了一个更合适的水平。"

    有一个Microsoft Connect案例可以弥补这一缺点。 Vote for it 如果这对你很重要。

        2
  •  0
  •   Eric Haskins    17 年前

    我找不到任何文件说你不应该直接使用这些方法,但我找的时间不长。

    您还可以参考不存在的EditorVisibleAttribute。根据Reflector的说法,这是 EditorBrowsableAttribute .

    反射器拆卸:

    [EditorBrowsable(EditorBrowsableState.Never)]
    public bool CheckAccess()
    {
    //CODE
    }