2 Stimmen

WPF-Plugin erstellt UI-Strategie

Ich habe eine Anwendung mit der Möglichkeit, einige Plugins (dll's) zu laden. Es ist auf WPF arbeiten. Das Problem ist Verzögerungen, wenn Plugin UI-Steuerelemente erstellt.

In der Hauptanwendung habe ich einige Steuerelemente. Ich übergebe diese Referenzen an das Plugin. Wenn ich die Show()-Methode des Plugins aufrufe, muss er spezielle UI-Steuerelemente zu meiner Hauptanwendung hinzufügen.

Wie kann ich die UI-Steuerelemente des Plugins im Hintergrund-Thread erstellen und sie in die Hauptanwendung einfügen, wenn der UI-Thread der Hauptanwendung keinen Zugriff auf die Steuerelemente hat, die in einem anderen Thread erstellt wurden?

Ich verwende diesen Code in der Hauptanwendung:

if (!module.IsInitialized())
            {
                this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new Action(
                    delegate()
                    {
                        module.InitializeComponents();
                        module.ShowModule();
                    }
                ));
            } 

wo die Plugin-Initialisierungsmethode ist:

public void InitializeComponents()
{
MyBodyArea = new SERPBodyArea(); // there is UI control
MyBottomArea = new SERPBottomArea(); // there is UI control
 MyHeaderRibbon = new SERPXamRibbon(); // there is UI control

_IsInitialized = true;
}

Wenn das Plugin also UI-Steuerelemente erstellt, wird meine Hauptanwendung eingefroren. Gibt es eine Möglichkeit, es im Hintergrund-Thread zu erstellen und es zum Hauptanwendungsfenster hinzuzufügen?

Danke. Und sorry für mein schlechtes Englisch :(.

0voto

Rick Sladkey Punkte 33363

Sie müssen Ihre Steuerelemente weiterhin auf dem UI-Thread konstruieren, können sie aber leichter und schlanker gestalten. Normalerweise bedeutet dies, dass ein Teil der Initialisierung eines Steuerelements (meist die Daten, an die das Steuerelement gebunden ist) auf einen Hintergrund-Thread verschoben wird. Die gleiche Strategie kann jedoch auch für CPU-intensive Berechnungen oder Datenstrukturmanipulationen angewendet werden.

Wenn die Menge der tatsächlichen Arbeit, die auf dem UI-Thread erledigt wird, proportional zur Menge der Informationen ist, die auf dem Bildschirm angezeigt werden, dann werden die meisten Anwendungen sehr schnell initialisiert. Ihre Situation hängt von Ihren Steuerelementen ab, so dass es schwer ist, genaueres zu sagen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X