2009-08-07 9 views
0

Ich versuche, zwei Ereignisse an das Hauptfenster zu senden, so dass ich eine Art von Animation zeigen kann, die den Benutzer wissen lässt, dass ich die Daten aktualisiere.WPF - Event Threading, Aktualisierung der GUI-Frage

Dies ist ein ObservableCollection-Objekt, sodass OnPropertyChanged sofort von den Bindungen im Hauptfenster erkannt wird. Der Schlaf ist nur dort, so dass der Benutzer die Animation sehen kann.

Die erste OnPropetyChanged wird jedoch nie gesehen. Ich nehme an, dies liegt daran, dass wir uns hier in einem einzigen Thread befinden und der timer_Tick beendet werden muss, bevor die GUI aktualisiert wird. Irgendwelche Vorschläge? In VB6 Land würden wir ein DoEvents oder ein Form.Refresh verwenden.

Danke!

private void timer_Tick(object sender, EventArgs e) 
    { 
     Loading = "Before: " + DateTime.Now.ToString(); 
     OnPropertyChanged("Loading"); 

     LoadData(); 
     Thread.Sleep(1000); 

     //Loading = Visibility.Hidden; 
     Loading = "After: " + DateTime.Now.ToString(); 
     OnPropertyChanged("Loading");   
    } 

Antwort

0

Well C# hat eine Application.DoEvents aber ich würde, wenn es unbedingt notwendig, ihn nicht empfehlen.

Haben Sie versucht, Ihren OnPropertyChanged-Anruf in eine Dispatcher.Invoke zu verpacken?

+0

Sie möchten mir nicht mit dem Code helfen, oder? ;) – LSTayon

+0

N/M Das habe ich benutzt: queryTimer.Dispatcher.Invoke (DispatcherPriority.Normal, neuer ThreadStart (Delegate {OnPropertyChanged ("Loading");})); Ich bin in einer Klasse, so dass ich den This.Dispatcher-Aufruf nicht verwenden kann. Wenn ich durch den Code gehe, wird die Witwe nach dem ersten Dispatch schwarz und erst dann aktualisiert, wenn ich aus dem Timer ticke ... – LSTayon

Verwandte Themen