Por que DispatcherObject.CheckAccess() e VerifyAccess() estão ocultos do Intellisense?

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

  •  09-06-2019
  •  | 
  •  

Pergunta

O System.Windows.Threading.DispatcherObject classe (que DependencyObject é baseado) contém uma função útil, chamada CheckAccess(), que determina se o código está ou não em execução no thread de UI.

Quando ontem quis usá-lo, fiquei intrigado ao descobrir que o Intellisense não mostrava a função (nem VerifyAccess(), que gera uma exceção quando não está no thread da interface do usuário), mesmo que a biblioteca MSDN a liste.Decidi investigar a aula usando o Reflector.Parece que a função em questão tem um EditorBrowsable(EditorBrowsableState.Never) atributo anexado a ele.O Dispatcher classe, que é usada por DispatcherObject, tem o mesmo atributo anexado a CheckAccess() e 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();

    // ...
}

Não acredito que a aplicação desse atributo seja aleatória (ou uma piada), então minha pergunta é:por que está aí?Esses métodos não deveriam ser chamados diretamente?Então por que eles não estão protected (ou internal, como alguns dos métodos mais úteis do WPF)?

Foi útil?

Solução

Um funcionário da Microsoft declarou recentemente CheckAccess é usado apenas para "cenários avançados", então eles o esconderam do Intellisense.

"CheckAccess e VerifyAccess sempre foram marcados para não ser visíveis, talvez o Intellisense não esteja respeitando.Você pode usar o Refletor para confirmar.A idéia aqui é que o CheckAccess e o VerifyAccess são cenários de avanços, que os desenvolvedores normais não precisam.

No entanto, acho que o EditorBrowsablestate.

Há um caso do Microsoft Connect para essa deficiência. Vote nisso se for importante para você.

Outras dicas

Não consigo encontrar nenhuma documentação que diga que você não deve usar esses métodos diretamente, mas não procurei por muito tempo.

Você também se refere ao EditorVisibleAttribute, que não existe.De acordo com o Reflector é o EditorBrowsableAttribute.

Desmontagem do refletor:

[EditorBrowsable(EditorBrowsableState.Never)]
public bool CheckAccess()
{
//CODE
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top