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

20.08.2008 07:07:30
2 ОТВЕТА
РЕШЕНИЕ

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

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

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

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

9
1.10.2008 15:53:23
Страница Microsoft Connect, указанная выше, больше не доступна. Вот новый отчет, на случай, если кто-то захочет продолжить лоббирование, чтобы изменить это: connect.microsoft.com/VisualStudio/feedback/details/3133453
Peter Duniho 3.05.2017 18:09:09

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

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

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

[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess()
{
//CODE
}
0
20.08.2008 07:22:02