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 で最も便利なメソッドのように) ?