2009-05-19 12 views
2

Ich habe eine WPF ListBox Steuerelement (view code) und ich halte vielleicht wie 100-200 Elemente drin. Jedes Mal, wenn die ObservableCollection an Änderungen gebunden ist, dauert es nur Sekundenbruchteile, um sie zu aktualisieren, und die gesamte Benutzeroberfläche wird eingefroren. Gibt es eine Möglichkeit, Elemente inkrementell hinzuzufügen, oder etwas, das ich tun kann, um die Leistung dieses Steuerelements zu verbessern?Wie kann ich das Rendern meiner WPF-ListBox beschleunigen?

Antwort

0

Versuchen Sie, VirtualizingStackPanel.IsVirtualizing = "True" auf Ihrer ListBox - MSDN Documentation. Siehe auch diese blog post Ich stieß auf. Ich habe es nicht persönlich versucht, aber es scheint ein guter Anfang zu sein. Viel Glück!

2

Versuchen Sie etwas where (PanelList ist eine ListBox oder etwas);

new Task(delegate { 
    foreach (var info in new DirectoryInfo("C:\\windows\\system32").EnumerateFiles()) { 
     PanelList.Dispatcher.Invoke(DispatcherPriority.Background, (Action)delegate { 
      PanelList.Items.Add(info); 
     }); 
     Thread.Sleep(0); 
    } 
}).Start(); 

Sie mögen eine Hintergrundtask ausgeführt und eine UI-Steuerung schrittweise durch Dispatcher.Invoke aktualisieren, stellen Sie sicher, dass Ihre Priorität relativly niedrig setzen, und ich werfe immer einen Schlaf in nur zum Spaß (voluntarially Kontext swap), Außerdem sollten Sie überprüfen, ob Ihre aktuelle Aufgabe abgebrochen wurde ...

Oh ya, das ist nicht so sehr eine Leistungsverbesserung als die zuvor erreichte Leistung und Reaktionsfähigkeit der Benutzeroberfläche.

+0

Dieser Ansatz war genau das, was ich brauchte. Danke für das Posten! –

Verwandte Themen