System.Windows.Threading.DispatcherObject
類(其中DependencyObject
基於此類)包含一個有用的函數,稱爲CheckAccess()
,用於確定代碼是否在UI線程上運行。爲什麼從Intellisense隱藏DispatcherObject.CheckAccess()和VerifyAccess()?
當我昨天想要使用它時,即使MSDN庫列出它,我也很困惑地發現Intellisense沒有顯示該功能(也不是在UI線程中引發異常的VerifyAccess()
)。我決定使用反射器來研究這個類。看來這個函數有一個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中一些最有用的方法)?
上面列出的Microsoft Connect頁面不再可用。這裏有一個新的報告,如果有人想繼續遊說以改變這一點:https://connect.microsoft.com/VisualStudio/feedback/details/3133453 – 2017-05-03 18:09:09