2012-04-05 7 views
0

Ich habe eine Baumansicht und eine Textbox. Während ich das Textfeld eintippe, wird die Baumansicht in Echtzeit aktualisiert (Filtern nach dem, was ich eintippe und mit den Objekten in der Baumansicht übereinstimme).Wie können UI-Elemente ohne Einfrieren geladen werden? (WPF)

Das Problem ist es beginnt einfrieren ein bisschen wie ich in der Box tippe. dh. Während die Baumansicht aktualisiert wird, friert das Textfeld ein. Ich habe die Logik, die die Baumansicht bevölkert, in einen anderen Thread gesetzt, in der Hoffnung, dass dies dazu führen würde, dass es ein bisschen schneller läuft - was es getan hat, aber nicht genug. Ich glaube, es ist die Aktualisierung der Benutzeroberfläche, die die Reaktionsfähigkeit verringert.

Was sind einige Möglichkeiten, wie ich dieses Problem angehen kann? Ist es möglich, dass verschiedene UI-Elemente (in diesem Fall die Baumansicht und das Textfeld) in verschiedenen Threads behandelt werden - und nicht nur die Logik, die jetzt der Fall ist?

Danke

Antwort

0

Ihr Problem ist, dass nur ein UI-Thread existiert!

Eine mögliche Lösung für Ihr Problem ist das Filtern der Baumansicht nach ein paar Millisekunden, nachdem der Benutzer eine Texteingabe vorgenommen hat.

Eine andere Möglichkeit besteht darin, die Filterung in einer separaten Aufgabe vorzunehmen und das Ergebnis der Treview neu zuzuordnen.

Ich hoffe, das hilft Ihnen bei Ihrem Problem.

+0

Vielen Dank für Ihre Antwort. Ist es möglich, mehr als einen UI-Thread zu erstellen, oder ist das eine Einschränkung von .NET? Was meinst du damit, die Filterung zu einer separaten Aufgabe zu machen? Im Moment wird das Filtern (Durchsuchen der Baumansicht) in einem anderen Thread durchgeführt. Es ist nur die tatsächliche Aktualisierung der Baumansicht, die die Dinge zu verlangsamen scheint. Prost – theqs1000

+0

@ Theqs1000 es existiert nur ein ui Thread durch die Beschränkung von .NET. Sie können versuchen, eine CollectionViewSource zu verwenden (versuchen Sie, die msdn-Hilfe zu sehen), um Ihre Baumansicht zu filtern oder nur Ihre Quellensammlung in einem separaten Thread (Task) zu filtern und das Ergebnis in die Baumansicht zu stellen (so dass die Baumansicht nicht einfriert) das hilft – punker76

Verwandte Themen