System.Windows.Threading.DispatcherObject
类(基于DependencyObject
的类)包含一个有用的函数CheckAccess()
,它确定代码是否在UI线程上运行。
当我昨天想使用它时,我很困惑地发现Intellisense没有显示该功能(也没有VerifyAccess()
,即使MSDN库列出了该功能,该功能也没有在UI线程上抛出异常)。我决定使用Reflector调查类(class)。似乎该函数具有附加的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();
// ...
}
我不认为该属性的应用是随机的(或者是个 Jest ),所以我的问题是:为什么在那儿?那些方法不应该直接调用吗?那么,为什么不使用
protected
(或internal
,如WPF中一些最有用的方法)呢?
最佳答案
Microsoft员工recently stated CheckAccess仅用于“高级方案”,因此他们将其隐藏在Intellisense中。
"CheckAccess and VerifyAccess have always been marked to be not visible, maybe IntelliSense wasn't respecting it. You can use Reflector to confirm. The idea here is that CheckAccess and VerifyAccess are advances scenarios, that normal developers don't need.
However, I do think that EditorBrowsableState.Advanced would have been a more appropriate level."
此缺点有一个Microsoft Connect案例。 Vote for it对您来说很重要。
关于.net-3.5 - 为什么DispatcherObject.CheckAccess()和VerifyAccess()对Intellisense隐藏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17500/