diff --git a/src/Main/Base/Project/Src/Project/AbstractProject.cs b/src/Main/Base/Project/Src/Project/AbstractProject.cs index 69dc09f414..953c9a54f1 100644 --- a/src/Main/Base/Project/Src/Project/AbstractProject.cs +++ b/src/Main/Base/Project/Src/Project/AbstractProject.cs @@ -779,6 +779,8 @@ namespace ICSharpCode.SharpDevelop.Project return properties; } + internal static List filesToOpenAfterSolutionLoad = new List(); + /// /// Loads project preferences (currently opened files, bookmarks etc.). /// @@ -788,9 +790,7 @@ namespace ICSharpCode.SharpDevelop.Project ICSharpCode.SharpDevelop.Bookmarks.BookmarkManager.AddMark(mark); } foreach (string fileName in properties.Get("files", new string[0])) { - if (File.Exists(fileName)) { - FileService.OpenFile(fileName); - } + filesToOpenAfterSolutionLoad.Add(fileName); } } } diff --git a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs index a21a3805b6..c7e8b9674a 100644 --- a/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs +++ b/src/Main/Base/Project/Src/Services/ParserService/ParserService.cs @@ -155,6 +155,7 @@ namespace ICSharpCode.Core ICSharpCode.Core.MessageService.ShowError(e, "Error while retrieving project contents from " + project); } } + WorkbenchSingleton.SafeThreadAsyncCall((ThreadStart)ProjectService.ParserServiceCreatedProjectContents); int workAmount = 0; foreach (ParseProjectContent newContent in createdContents) { if (abortLoadSolutionProjectsThread) return; @@ -167,7 +168,7 @@ namespace ICSharpCode.Core } StatusBarService.ProgressMonitor.BeginTask("Parsing...", workAmount); foreach (ParseProjectContent newContent in createdContents) { - if (abortLoadSolutionProjectsThread) return; + if (abortLoadSolutionProjectsThread) break; try { newContent.Initialize2(); } catch (Exception e) { @@ -182,6 +183,7 @@ namespace ICSharpCode.Core ParseProjectContent newContent = (ParseProjectContent)state; newContent.Initialize1(); newContent.Initialize2(); + StatusBarService.ProgressMonitor.Done(); } internal static IProjectContent CreateProjectContentForAddedProject(IProject project) diff --git a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs index c01aadeec8..0bca7a9fbe 100644 --- a/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs +++ b/src/Main/Base/Project/Src/Services/ProjectService/ProjectService.cs @@ -230,6 +230,7 @@ namespace ICSharpCode.SharpDevelop.Project MessageService.ShowError(ex.Message); return; } + AbstractProject.filesToOpenAfterSolutionLoad.Clear(); try { string file = GetPreferenceFileName(openSolution.FileName); if (FileUtility.IsValidFileName(file) && File.Exists(file)) { @@ -239,11 +240,24 @@ namespace ICSharpCode.SharpDevelop.Project } catch (Exception ex) { MessageService.ShowError(ex); } + // Create project contents for solution + ParserService.OnSolutionLoaded(); + // preferences must be read before OnSolutionLoad is called to enable // the event listeners to read e.Solution.Preferences.Properties OnSolutionLoaded(new SolutionEventArgs(openSolution)); } + internal static void ParserServiceCreatedProjectContents() + { + foreach (string file in AbstractProject.filesToOpenAfterSolutionLoad) { + if (File.Exists(file)) { + FileService.OpenFile(file); + } + } + AbstractProject.filesToOpenAfterSolutionLoad.Clear(); + } + static void ApplyConfigurationAndReadPreferences() { openSolution.ApplySolutionConfigurationToProjects(); @@ -396,7 +410,6 @@ namespace ICSharpCode.SharpDevelop.Project static void OnSolutionLoaded(SolutionEventArgs e) { - ParserService.OnSolutionLoaded(); if (SolutionLoaded != null) { SolutionLoaded(null, e); }