2012-04-03 14 views
1

Diese Aufgabe sollte ziemlich einfach sein, aber nichts, was ich versuchte, hat funktioniert. Ich versuche nur, den Text zu entfernen, wenn auf die Schaltfläche geklickt wird und während Daten geladen und validiert werden.

Ich habe folgendes versucht, die keinen Neuaufbau zwingt:Wie Erzwingen Steuerelement Neuzeichnen in Ereignishandler

private delegate void InlineDelegate(); 
private void btnLogon_Click(object sender, RoutedEventArgs e) 
{ 
    lblInvalidLogon.Dispatcher.Invoke(new InlineDelegate(() => 
    { 
     lblInvalidLogon.Content = string.Empty; 
     lblInvalidLogon.InvalidateVisual(); 
    }), System.Windows.Threading.DispatcherPriority.Render, null); 
    // 
    // Process to verify logon credentials... 
    // 
} 

Ich habe auch versucht DispatcherPriority.Send, und ich habe eine Thread.Sleep nach dem Invoke gelegt, um ihm genügend Zeit, um Aktualisieren Sie die Benutzeroberfläche, aber nichts, was ich ausprobiert habe, zwingt die Benutzeroberfläche zu aktualisieren, während der Authentifizierungsprozess fortgesetzt wird.

+1

Sie müssen die Anmeldeüberprüfung in einem anderen Thread bewegen, es ist die UI-Thread zu blockieren. – Phil

+0

@Phil Yup, als ich nach dem Stellen der Frage zu dem Projekt zurückkam, gab es meinem Gehirn offensichtlich Zeit, sich zu beschneiden, und mir wurde klar, dass das genau das Problem war. –

Antwort

1

Phil zeigte richtig die Ursache heraus:

Sie müssen die Anmeldeüberprüfung in einem anderen Thread bewegen, es ist die UI-Thread zu blockieren.

arbeitete daran, und kam mit der Lösung zur gleichen Zeit wie sein Kommentar. Ich habe es wie unten gelöst:

private delegate void InlineDelegate(); 
private void btnLogon_Click(object sender, RoutedEventArgs e) 
{ 
    lblInvalidLogon.Content = string.Empty; 
    lblInvalidLogon.Dispatcher.Invoke(new InlineDelegate(() => 
    { 
     // 
     // Process to verify logon credentials... 
     // 
    }), System.Windows.Threading.DispatcherPriority.Background, null); 
} 
Verwandte Themen