Пример #1
0
        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);
            }
        }