diff options
author | Mike Krüger <mkrueger@xamarin.com> | 2017-04-24 12:25:03 +0300 |
---|---|---|
committer | Mike Krüger <mkrueger@xamarin.com> | 2017-04-24 12:25:03 +0300 |
commit | 6440ea58310f3e9d3359b89b4825390e390d0c0d (patch) | |
tree | 726f3c78f5bfe13eeee0d2daad3a562f873355f8 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem | |
parent | bb85b552e19cff27de0be2a3b41ea0aa26514395 (diff) |
Fixed 'Bug 55476 - TypeSystem task loop'
That makes the work around with adding/removing event handlers
obsolete. That didn't really work because the event was triggered on
UI thread.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs index 3e3c656480..98fb53d313 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.TypeSystem/TypeSystemService_WorkspaceHandling.cs @@ -112,16 +112,16 @@ namespace MonoDevelop.Ide.TypeSystem } } - internal static async Task<List<MonoDevelopWorkspace>> Load (WorkspaceItem item, ProgressMonitor progressMonitor, CancellationToken cancellationToken = default(CancellationToken)) + internal static async Task<List<MonoDevelopWorkspace>> Load (WorkspaceItem item, ProgressMonitor progressMonitor, CancellationToken cancellationToken = default (CancellationToken), bool showStatusIcon = true) { using (Counters.ParserService.WorkspaceItemLoaded.BeginTiming ()) { var wsList = new List<MonoDevelopWorkspace> (); //If we want BeginTiming to work correctly we need to `await` - return await InternalLoad (wsList, item, progressMonitor, cancellationToken).ContinueWith (t => { t.Wait (); return wsList; }); + return await InternalLoad (wsList, item, progressMonitor, cancellationToken, showStatusIcon).ContinueWith (t => { t.Wait (); return wsList; }); } } - static Task InternalLoad (List<MonoDevelopWorkspace> list, MonoDevelop.Projects.WorkspaceItem item, ProgressMonitor progressMonitor, CancellationToken cancellationToken = default(CancellationToken)) + static Task InternalLoad (List<MonoDevelopWorkspace> list, MonoDevelop.Projects.WorkspaceItem item, ProgressMonitor progressMonitor, CancellationToken cancellationToken = default(CancellationToken), bool showStatusIcon = true) { return Task.Run (async () => { var ws = item as MonoDevelop.Projects.Workspace; @@ -138,14 +138,16 @@ namespace MonoDevelop.Ide.TypeSystem lock (workspaceLock) workspaces = workspaces.Add (workspace); list.Add (workspace); - workspace.ShowStatusIcon (); + if (showStatusIcon) + workspace.ShowStatusIcon (); await workspace.TryLoadSolution (cancellationToken).ConfigureAwait (false); solution.SolutionItemAdded += OnSolutionItemAdded; solution.SolutionItemRemoved += OnSolutionItemRemoved; TaskCompletionSource<MonoDevelopWorkspace> request; if (workspaceRequests.TryGetValue (solution, out request)) request.TrySetResult (workspace); - workspace.HideStatusIcon (); + if (showStatusIcon) + workspace.HideStatusIcon (); } } }); |