当前位置:  开发笔记 > 开发工具 > 正文

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

如何解决《为什么DispatcherObject.CheckAccess()和VerifyAccess()隐藏在Intellisense中?》经验,为你挑选了1个好方法。

System.Windows.Threading.DispatcherObject类(DependencyObject基于)包含有用的功能,称为CheckAccess(),确定所述代码是否被UI线程上运行.

当我昨天想要使用它时,我很困惑地发现Intellisense没有显示该函数(也没有VerifyAccess(),当不在UI线程上时抛出异常),即使MSDN库列出它.我决定使用Reflector调查这个类.似乎有问题的函数EditorBrowsable(EditorBrowsableState.Never)附加了一个属性.使用的DispatcherDispatcherObject具有附加到的相同属性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中一些最有用的方法)?



1> Judah Gabrie..:

微软员工最近表示 CheckAccess仅用于"高级方案",因此他们将其隐藏在Intellisense中.

"CheckAccess和VerifyAccess一直被标记为不可见,也许IntelliSense不尊重它.您可以使用Reflector进行确认.这里的想法是CheckAccess和VerifyAccess是正常开发人员不需要的进步方案.

但是,我确实认为EditorBrowsableState.Advanced会更合适."

针对这个缺点,有一个Microsoft Connect案例.如果它对你很重要,请投票给它.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有