head.WriteLine()

Dienstag, März 02, 2010

WPF Threading ohne Intellisense

In meinen WPF-Schulungen kommt es immer wieder zu Verwirrungen bzgl. einiger Methoden, die im Zusammenhang mit Threading zum Einsatz kommen. Daher habe die Problematik hier noch einmal zusammengefasst.

Die Klasse DispatcherObject bietet mit CheckAccess() und VerifyAccess() zwei Methoden, mit denen abgefragt werden kann, ob der Zugriff auf ein Objekt aus dem aktuellen Thread aus möglich ist.

Das Problem ist nur, dass beide Methoden nicht über Intellisense zugreifbar sind! Dies führt dazu, dass viele Entwickler sie nicht kennen. Warum die Methoden nicht angezeigt werden, offenbart ein Blick in den Source Code:

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

Hier sorgt das EditorBrowsable-Attribut dafür, dass die entsprechende Methode weder in Intellisense, noch im Object Browser angezeigt werden.

Das gleiche gilt übrigens auch für die gleichnamigen Methoden der Dispatcher-Klasse. Darüber hinaus werden alle Überladungen der Methoden Dispatcher.Invoke() und Dispatcher.BeginInvoke() nicht angezeigt, die einen Parameter vom Typ DispatcherPriority definieren.

Interessant ist an dieser Stelle, das die genannten Methoden den Anschein erwecken, als wären sie nicht vorhanden, jedoch ausführlich (inkl. Beispielen) in der MSDN beschrieben werden.

Verstehen muss man das nicht, oder?