Dot-Net-3.5
為什麼 DispatcherObject.CheckAccess() 和 VerifyAccess() 對 Intellisense 隱藏?
該類
System.Windows.Threading.DispatcherObject(DependencyObject基於)包含一個有用的函式,稱為CheckAccess(),它確定程式碼是否在 UI 執行緒上執行。當我昨天想使用它時,我很困惑地發現 Intellisense 沒有顯示該功能(也
VerifyAccess()沒有在 UI 執行緒上時拋出異常),即使 MSDN 庫列出了它。我決定使用 Reflector 來研究這門課。似乎有問題的函式EditorBrowsable(EditorBrowsableState.Never)附加了一個屬性。由 使用的Dispatcher類DispatcherObject具有附加到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 案例。如果它對您很重要,請投票給它。