Почему 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)?


person Pepor    schedule 20.08.2008    source источник


Ответы (2)


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

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

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

Для этого недостатка есть дело Microsoft Connect. Проголосуйте, если это важно для вас.

person Judah Gabriel Himango    schedule 01.10.2008
comment
Указанная выше страница Microsoft Connect больше недоступна. Вот новый отчет на случай, если кто-то захочет продолжить лоббировать изменение этого: connect.microsoft .com/VisualStudio/feedback/details/3133453 - person Peter Duniho; 03.05.2017

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

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

Разборка отражателя:

[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess()
{
//CODE
}
person Eric Haskins    schedule 20.08.2008