Сведения о вопросе

Fhohir

02:57, 5th August, 2020

Теги

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

Просмотров: 470   Ответов: 2

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

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



  Сведения об ответе

LAST

00:15, 28th August, 2020

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

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

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

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


  Сведения об ответе

PAGE

21:31, 11th August, 2020

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться