Ejemplo n.º 1
0
        static async Task BuildDispatcherLoopAsync()
        {
            ITaskHandler2 dispatchStatus = null;

            while (!QtVsToolsPackage.Instance.Zombied)
            {
                while (BuildQueue.IsEmpty || RequestTimer.ElapsedMilliseconds < 1000)
                {
                    if (BuildQueue.IsEmpty && dispatchStatus != null)
                    {
                        dispatchStatus.Dismiss();
                        dispatchStatus = null;
                    }
                    await Task.Delay(100);
                }
                if (BuildQueue.TryDequeue(out QtProjectBuild buildRequest))
                {
                    if (dispatchStatus == null)
                    {
                        dispatchStatus = StatusCenter.PreRegister(
                            new TaskHandlerOptions
                        {
                            Title = "Qt VS Tools",
                        },
                            new TaskProgressData
                        {
                            ProgressText = string.Format(
                                "Refreshing IntelliSense data, {0} project(s) remaining...",
                                BuildQueue.Count),
                            CanBeCanceled = true
                        })
                                         as ITaskHandler2;
                        dispatchStatus.RegisterTask(new Task(() =>
                                                             throw new InvalidOperationException()));
                    }
                    else
                    {
                        dispatchStatus.Progress.Report(
                            new TaskProgressData
                        {
                            ProgressText = string.Format(
                                "Refreshing IntelliSense data, {0} project(s) remaining...",
                                BuildQueue.Count),
                            CanBeCanceled = true,
                        });
                    }
                    await buildRequest.BuildAsync();
                }
                if (BuildQueue.IsEmpty ||
                    dispatchStatus?.UserCancellation.IsCancellationRequested == true)
                {
                    if (dispatchStatus != null)
                    {
                        dispatchStatus.Dismiss();
                        dispatchStatus = null;
                    }
                    Reset();
                }
            }
        }
Ejemplo n.º 2
0
        void BeginInitStatus()
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            lock (StaticCriticalSection) {
                if (InitStatus != null)
                {
                    return;
                }
                try {
                    InitStatus = StatusCenter.PreRegister(
                        new TaskHandlerOptions
                    {
                        Title = "Qt VS Tools: Setting up project tracking..."
                    },
                        new TaskProgressData
                    {
                        ProgressText = string.Format("{0} ({1} projects remaining)",
                                                     Project.Name, InitQueue.Count),
                        CanBeCanceled   = true,
                        PercentComplete = 0
                    })
                                 as ITaskHandler2;
                } catch (Exception e) {
                    Messages.Print(
                        e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace);
                }
                InitStatus.RegisterTask(new Task(() => throw new InvalidOperationException()));
            }
        }