La classe System.Windows.Threading.DispatcherObject
(sur laquelle DependencyObject
est basé) contient une fonction utile, appelée CheckAccess()
, qui détermine si le code s'exécute ou non sur le thread d'interface utilisateur. Quand j'ai voulu l'utiliser hier, j'ai été intrigué pour découvrir que Intellisense n'affichait pas la fonction (ni VerifyAccess()
, qui lève une exception quand il n'était pas sur le thread UI), même si la librairie MSDN le répertorie. J'ai décidé d'étudier la classe en utilisant Reflector. Il semble que la fonction en question ait un attribut EditorBrowsable(EditorBrowsableState.Never)
attaché. La classe Dispatcher
, qui est utilisé par DispatcherObject
, a le même attribut attaché à CheckAccess()
et VerifyAccess()
:Pourquoi DispatcherObject.CheckAccess() et VerifyAccess() sont-ils masqués dans Intellisense?
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();
// ...
}
Je ne crois pas que l'application de cet attribut est aléatoire (ou une blague), donc ma question est : pourquoi est-ce là? Ces méthodes ne devraient-elles pas être appelées directement? Alors pourquoi ne sont-ils pas protected
(ou internal
, comme certaines des méthodes les plus utiles dans le WPF)?
La page Microsoft Connect ci-dessus n'est plus disponible. Voici un nouveau rapport, au cas où quelqu'un voudrait continuer à faire pression pour changer ceci: https://connect.microsoft.com/VisualStudio/feedback/details/3133453 –