.net 3.5 win10無法安裝 為什麼從Intellisense中隱藏DispatcherObject.CheckAccess()和VerifyAccess()?




netfx3 cab (2)

微軟的一名員工最近聲稱, CheckAccess只用於“高級場景”,所以他們從智能感知中隱藏起來。

“CheckAccess和VerifyAccess一直被標記為不可見,也​​許IntelliSense不尊重它,你可以使用Reflector來確認。這裡的想法是,CheckAccess和VerifyAccess是高級場景,正常開發者不需要。

不過,我認為EditorBrowableState.Advanced將會是一個更合適的級別。“

有一個微軟連接的情況下,這個缺點。 投票給它,如果這對你很重要。

System.Windows.Threading.DispatcherObject類( DependencyObject所基於的)包含一個名為CheckAccess()的有用函數,該函數確定代碼是否在UI線程上運行。

當我想要使用它時,我很困惑地發現,即使MSDN庫列出它,Intellisense也沒有顯示函數(也不是在UI線程中引發異常的VerifyAccess() 。 我決定使用反射器來研究這個類。 似乎有問題的函數有一個EditorBrowsable(EditorBrowsableState.Never)屬性附加到它。 Dispatcher使用的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中的一些最有用的方法)?


我找不到任何文件說你不應該直接使用這些方法,但我沒有看很長的時間。

你也可以參考EditorVisibleAttribute,它不存在。 根據反射器它是EditorBrowsableAttribute

反射器拆卸:

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




intellisense