Подтвердить что ты не робот

Почему DispatcherObject.CheckAccess() и VerifyAccess() скрыты от Intellisense?

Класс System.Windows.Threading.DispatcherObject (на котором основан DependencyObject) содержит полезную функцию, называемую CheckAccess(), которая определяет, выполняется ли код в потоке пользовательского интерфейса.

Когда я хотел использовать его вчера, я был озадачен, узнав, что Intellisense не показывал функцию (и VerifyAccess(), которая генерирует исключение, если не в потоке пользовательского интерфейса), хотя библиотека MSDN перечисляет ее, Я решил исследовать класс с помощью 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)?

4b9b3361

Ответ 1

Недавно опубликованный сотрудник Microsoft CheckAccess используется только для "расширенных сценариев" , поэтому они скрыли его от Intellisense.

"CheckAccess и VerifyAccess имеют всегда были отмечены как невидимые, возможно, IntelliSense не уважает Это. Вы можете использовать Reflector для подтверждения. Идея здесь в том, что CheckAccess и VerifyAccess запускает сценарии, что нормальные разработчики не нуждаются.

Однако, я думаю, что EditorBrowsableState.Advanced будет были более подходящим уровнем".

В этом случае Microsoft Connect подходит для этого недостатка. Голосуйте за него, если это важно для вас.

Ответ 2

Я не могу найти документацию, в которой говорится, что вы не должны использовать эти методы напрямую, но я не выглядел очень долго.

Также вы ссылаетесь на EditorVisibleAttribute, который не существует. Согласно Reflector это EditorBrowsableAttribute.

Разбор рефлектора:

[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess()
{
//CODE
}