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

StackOverflow https://stackoverflow.com/questions/17500

  •  09-06-2019
  •  | 
  •  

Вопрос

А 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)?

Это было полезно?

Решение

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

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

Тем не менее, я думаю, что editorbrowsablestate.advanced был бы более подходящим уровнем ».

Microsoft Connect может устранить этот недостаток. Голосуйте за это если это важно для тебя.

Другие советы

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

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

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

[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess()
{
//CODE
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top