Ich schreibe gerade eine einfache WPF 3.5-Anwendung, die SharePoint COM zum Aufrufen von SharePoint-Websites und zum Generieren von Gruppen- und Benutzerinformationen verwendet. Da dieser Vorgang eine Weile dauert, möchte ich eine ProgressBar anzeigen, während die Gruppen generiert werden. Der gewünschte Prozess ist wie folgt:
Das Problem ist, dass die Benutzeroberfläche nie aktualisiert wird. Weder die ProgressBar noch die ListView nehmen Änderungen vor. Wenn jemand irgendwelche Ideen hat, um mit dem Code unten zu helfen, würde es sehr geschätzt.
%Vor% Zuerst müssen Sie ProgressChanged
-Ereignisse unterstützen.
Aktualisieren Sie Ihre BackgroundWorker
-Initialisierung auf:
Danach müssen Sie einen OnProgressChanged
Handler hinzufügen:
Daher müssen Sie Ihre DoWork
:
Das liegt daran, dass Sie die GUI von DoWork
nicht ändern dürfen.
Danach wird jedes ListViewItem
separat zu deinem ListView
hinzugefügt. Ich würde auch empfehlen, dass Ihre URL als Argument an RunWorkerAsync
übergeben wird.
Bearbeiten : Fügen Sie einen Prozentsatz zu OnProgressChanged
hinzu.
In Ihrer DoWork-Methode bearbeiten Sie WPF-Steuerelemente in Code in einem Hintergrundthread, den Sie nicht ausführen sollten. Eigentlich sollten Sie Fehler wie "Kann nicht auf andere Steuerung zugreifen" erhalten. Wahrscheinlich werden diese Ausnahmen von Ihrem Catch-All-Fehlerhandler abgefangen, und vielleicht funktioniert auch die MessageBox nicht aus dem Hintergrundthread.
Als schnelle Lösung müssten Sie die Klassenfelder siteURL und collGroups erstellen, alles vor dem using-Block in die GetGroupsAndUsersButton_Click-Methode und alles, beginnend mit der ersten foreach-Schleife bis zum RunworkerCompleted-Ereignis, verschieben, damit der gesamte Code auf die Steuerelemente zugreift läuft auf dem UI-Thread.
Eine andere Sache, die Sie ändern sollten, ist, dass Sie ListViewItems nicht in Code erstellen sollten, sondern stattdessen eine DataTemplate verwenden ... das ist jedoch nicht mit Ihrem Problem verbunden.
Tags und Links wpf c# sharepoint backgroundworker