This forum is read-only - Please use our new Citavi Forum instead.
Dieses Forum dient nur zur Recherche - Bitte nutzen Sie das neue Citavi Forum für Ihre Fragen.

Reference Collection ungültig nach Modifikationen Topic is solved

Installationsanleitung und allgemeine Informationen zu Citavi Add-Ons

Reference Collection ungültig nach Modifikationen

Postby mike » 2014-08-21 08:38

Wenn ich nach Projektmodifikationen ein zweites Mal über project.References iterieren möchte bekomme ich eine Exception
Code: Select all
System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=Collection was modified; enumeration operation may not execute.
  Source=mscorlib
  StackTrace:
       at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
       at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
       at System.Collections.Generic.List`1.Enumerator.MoveNext()
       at CitaviMike.CitaviMikeAddon.MergeEvaluationAndNotesFields() in CitaviMikeAddon.cs:line 237
       at CitaviMike.CitaviMikeAddon.OnBeforePerformingCommand(BeforePerformingCommandEventArgs e) in CitaviMikeAddon.cs:line 291
       at SwissAcademic.Citavi.Shell.ProjectShellForm.OnBeforePerformingCommand(BeforePerformingCommandEventArgs e)
  InnerException:

Wie kann ich die project.References Collection aktualisieren?

Codebeispiel (die Exception wird nach
logMessage("---------------- New Notes --------------------");
foreach (Reference citaviReference in project.References)
geworfen):
Code: Select all
        private void MergeEvaluationAndNotesFields()
        {
            // required for Citavi2 to Citavi4 migration
            bool simulation = false;

            logMessage("MergeEvaluationAndNotesFields: simulation="+simulation.ToString());
            ProjectShell projectShell = Program.ActiveProjectShell;
            Project project = projectShell.Project;
            logMessage("Project includes " + project.References.Count + " references.");

            logMessage("---------------- Merged Notes --------------------");
            foreach (Reference citaviReference in project.References)
            {
                string evaluationText = citaviReference.Evaluation;
                if (!string.IsNullOrEmpty(evaluationText))
                {
                    string notesText=citaviReference.Notes;
                    if (!string.IsNullOrEmpty(notesText))
                    {
                        evaluationText += "\n" + notesText;
                        logMessage("Reference #" + citaviReference.SequenceNumber + " Merged Notes: "+evaluationText);
                        if (!simulation)
                        {
                            citaviReference.Notes = evaluationText;
                            citaviReference.Evaluation = string.Empty;
                        }
                    }

                }
            }
            if (!simulation)
            {
                project.Save();
            }

            logMessage("---------------- New Notes --------------------");
            foreach (Reference citaviReference in project.References)
            {
                string evaluationText = citaviReference.Evaluation;
                if (!string.IsNullOrEmpty(evaluationText))
                {
                    string notesText=citaviReference.Notes;
                    if (string.IsNullOrEmpty(notesText))
                    {
                        logMessage("Reference #" + citaviReference.SequenceNumber + " New Notes: "+evaluationText);
                        if (!simulation)
                        {
                            citaviReference.Notes = evaluationText;
                            citaviReference.Evaluation = string.Empty;
                        }

                    }

                }
            }
            if (!simulation)
            {
                project.Save();
            }


            logMessage("Finished MergeEvaluationAndNotesFields");
        }
mike
 

Re: Reference Collection ungültig nach Modifikationen

Postby Patrick Hilt » 2014-08-21 09:19

Hallo Mike,

bei uns läuft der Code ohne Fehler durch. Welches Betriebssystem und welche Version von Citavi verwenden Sie? Wenn Sie die aktuellste Version von Citavi verwenden (4.4.0.28) können Sie uns gerne ein Beispielprojekt schicken, mit dem der Fehler auftritt.

Zum Übermitteln der Datei(en) verwenden Sie bitte unsere geschützte Upload-Möglichkeit. Damit wir die zugesandte Datei Ihrer Frage zuordnen können, tragen Sie bitte in das Nachricht-Feld des Upload-Formulars die Internetadresse Ihres Forumsbeitrags ein. Vielen Dank.

Freundliche Grüße
Patrick
Patrick Hilt
Citavi Customer Service
 

Re: Reference Collection ungültig nach Modifikationen  Topic is solved

Postby mike » 2014-08-21 09:27

Ich verwende Win7-64 Bit in Englisch und Citavi 4.4.0.28. In meiner Datenbank sind ca. 1800 Einträge.
Anscheinend wird der Enumerator der ProjectReferenceCollection zufällig nach Änderungen ungültig, da ich inzwischen die System.InvalidOperationException auch schon beim Durchlaufen der ersten Schleife nach einigen Zuweisungen des Note/Evaluation Felder bekomme.

Wenn ich mit einem Clone der Liste arbeite, funktioniert die Modifikation der Notes/Evalutaion Felder in beiden Schleifen ohne Exceptions.
Code: Select all
List<Reference> citaviReferences = new List<Reference>(project.References); // clone collection to avoid iteration errors after modifications
mike
 


Return to Über Citavi Add-Ons



cron