Dot-Net-3.5

為什麼 DispatcherObject.CheckAccess() 和 VerifyAccess() 對 Intellisense 隱藏?

  • August 20, 2008

該類System.Windows.Threading.DispatcherObjectDependencyObject基於)包含一個有用的函式,稱為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 中一些最有用的方法)?

一位微軟員工最近表示CheckAccess 僅用於“高級場景”,因此他們將其隱藏在 Intellisense 中。

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

但是,我確實認為 EditorBrowsableState.Advanced 會是更合適的級別。”

針對這個缺點,有一個 Microsoft Connect 案例。如果它對您很重要,請投票給它。

引用自:https://stackoverflow.com/questions/17500