Per què Dispatcher.CheckAccess no surt a Intellisense

Quan treballem amb multi-threading és molt habitual actualitzar controls d’usuari però amb Windows només el thread que crea un control pot actualitzar-lo (Thread affinity). És per això que existeix Dispatcher amb Wpf i Silverlight com a classe que representa el thread UI o thread del control si hi accedim per la propietat Dispatcher. Però quan treballem amb multi-threading necessitem comprovar si el thread que està a punt d’actualitzar el control és o no el creador del mateix. Per això tenim el CheckAccess com a mètode que comprova si el thread pot actualitzar el control o necessitem fer-ho per Dispatcher.

private delegate void AddTextDelegate(Panel p, String text);
private void AddText(Panel p, String text)
{
p.Children.Clear();
p.Children.Add(new TextBlock { Text = text });
}
private void TestBeginInvokeWithParameters(Panel p)
{
if (p.Dispatcher.CheckAccess()) AddText(p, "Added directly.");
else p.Dispatcher.BeginInvoke(
new AddTextDelegate(AddText), p, "Added by Dispatcher.");
}

Però CheckAccess no surt a Intellisense però si l’utilitzem no dóna un error de compilació. CheckAccess és un mètode amb l’atribut EditorBrowsable a Never. Microsoft diu que no és per programadors normals. Però crec que ho solucionaran ja que han rebut moltes queixes.

Anuncis

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

S'està connectant a %s