async Task InitializeAsync() { int p = 0; await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); UpdateInitStatus(p += 10); VcProject = Project.Object as VCProject; if (VcProject == null) { return; } UpdateInitStatus(p += 10); var context = Project.Object as IVsBrowseObjectContext; if (context == null) { return; } UpdateInitStatus(p += 10); UnconfiguredProject = context.UnconfiguredProject; if (UnconfiguredProject == null || UnconfiguredProject.ProjectService == null || UnconfiguredProject.ProjectService.Services == null) { return; } await TaskScheduler.Default; UpdateInitStatus(p += 10); var configs = await UnconfiguredProject.Services .ProjectConfigurationsService.GetKnownProjectConfigurationsAsync(); UpdateInitStatus(p += 10); Initialized.Set(); Subscribers = new List <Subscriber>(); int n = configs.Count; int d = (100 - p) / (n * 2); foreach (var config in configs) { var configProject = await UnconfiguredProject.LoadConfiguredProjectAsync(config); UpdateInitStatus(p += d); Subscribers.Add(new Subscriber(this, configProject)); configProject.ProjectUnloading += OnProjectUnloadingAsync; if (QtVsToolsPackage.Instance.Options.BuildDebugInformation) { Messages.Print(string.Format( "{0:HH:mm:ss.FFF} QtProjectTracker({1}): Started tracking [{2}] {3}", DateTime.Now, Thread.CurrentThread.ManagedThreadId, config.Name, ProjectPath)); } UpdateInitStatus(p += d); } }