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

为什么DispatcherObject.CheckAccess()和VerifyAccess()对IntelliSense隐藏?

  •  20
  • friedo  · 技术社区  · 16 年前

    这个 System.Windows.Threading.DispatcherObject 类(哪些) DependencyObject 基于)包含一个有用的函数,调用 CheckAccess() ,确定代码是否在UI线程上运行。

    当我昨天想使用它时,我很困惑地发现intellisense没有显示函数(也没有 VerifyAccess() ,这会在不在UI线程上时引发异常,即使msdn库列出了异常。我决定用反射镜来研究这门课。似乎所讨论的函数有一个 EditorBrowsable(EditorBrowsableState.Never) 附加到它的属性。这个 Dispatcher 类,由使用 DispatcherObject ,具有附加到的相同属性 校验访问() ValueAccess() :

    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 回复  |  直到 16 年前
        1
  •  8
  •   Judah Gabriel Himango    16 年前

    微软员工 recently stated checkaccess仅用于“高级方案”,因此他们将其隐藏在intellisense中。

    “checkaccess和verifyaccess 始终标记为不可见, 也许智能感知不尊重 它。你可以用反射镜确认。 这里的想法是checkaccess和 验证访问是高级方案, 普通开发者不需要的。

    但是,我认为 editorBrowsableState.advanced将 更合适的水平。”

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

        2
  •  0
  •   Eric Haskins    16 年前

    我找不到任何文档说明您不应该直接使用这些方法,但我找不到很长时间。

    另外,您还引用了不存在的editorvisibleAttribute。根据反射镜,它是 EditorBrowsableAttribute .

    反射镜拆卸:

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