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

Pep*_*por 22 intellisense .net-3.5

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();

    // ...
}
Run Code Online (Sandbox Code Playgroud)

我不相信该属性的应用是随机的(或一个笑话),所以我的问题是:它为什么存在?这些方法不应该直接调用吗?那么为什么不是它们protected(或者internal,像WPF中一些最有用的方法)?

Jud*_*ngo 9

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

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

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

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