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