2016-03-21 8 views
0

Ich möchte Möglichkeit haben, den Rendering-Thread abzubrechen, habe ich keine andere Lösung für mein Problem gefunden: Ich habe ein Projekt mit MVVM Architektur, in meinem ShellView habe ich ein Menü mit Schaltflächen, auf denen ich kann in einem ContentControl verschiedene Ansichten auswählen. Aufgrund vielen Kontrollen in jeder Ansicht und um die Interaktion mit dem Benutzer zu verbessern, I die Sichtbarkeit des Layoutsteuer kollabieren, der all untergeordnete Steuer im Konstruktor der Ansicht enthält, und als nächste, sichtbar machen, nachdem die Ansicht geladen wird. Es ermöglicht, zuerst die Ansicht anzuzeigen, bevor untergeordnete Steuerelemente gerendert werden.Rendering Thread des visuellen Baumes

Das Problem ist während des Renderns, wenn ich versuche, die Ansicht zu ändern, muss ich auf das Rendern der aktuellen Ansicht warten, bevor das neue ausgewählt wird.

Meine Idee ist also, das Rendern der aktuellen Ansicht abzubrechen und die neue Ansicht vorrangig anzuzeigen. Wie kann ich das machen?

Antwort

0

Wenn es Ihr eigener Code ist, der Zeit in diesen Kindsteuerelementen nimmt (dh wenn Sie ein 3D-Spiel mit Direct3D-Interop renderen oder schwer zu berechnende Bitmaps auf der CPU generieren oder blockierende I/O im GUI-Thread verwenden) usw.) - In diesem Fall könnten Sie diese Arbeit auf einen anderen Thread abladen (oder in diesem Fall auf nicht blockierende E/A wechseln) und den GUI-Thread erst dann aktualisieren, wenn er abgeschlossen ist.

Aber wenn WPF-Rendering so lange dauert, bedeutet das, dass etwas mit Ihrem visuellen Baum nicht stimmt. Read this article for a start. Wenn Sie Glück haben, müssen Sie nur einige Zeilen XAML in z. Aktivieren Sie die Virtualisierung. Wenn nicht, müssen Sie die gesamte GUI überarbeiten, um die Leistungsprobleme zu beheben.