System.Windows.Threading.DispatcherObject
クラス (に基づくDependencyObject
) にはCheckAccess()
、コードが UI スレッドで実行されているかどうかを判断する、 と呼ばれる便利な関数が含まれています。
昨日それを使用したかったときVerifyAccess()
、MSDN ライブラリにリストされているにもかかわらず、Intellisense が関数 (UI スレッド上にないときに例外をスローする も) を表示しないことに戸惑いました。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 で最も便利なメソッドのように) ?