From ca47896204482bf4a6979e3838bf7f09f61cebeb Mon Sep 17 00:00:00 2001 From: giy <giy@omp-system.ru> Date: Fri, 02 Sep 2022 14:16:56 +0300 Subject: [PATCH] Обновление до версии 2.9.0 --- QtVsTools.Core/WaitDialog.cs | 41 ++++++++++++++++++++++++----------------- 1 files changed, 24 insertions(+), 17 deletions(-) diff --git a/QtVsTools.Core/WaitDialog.cs b/QtVsTools.Core/WaitDialog.cs index cff8851..60a6adc 100644 --- a/QtVsTools.Core/WaitDialog.cs +++ b/QtVsTools.Core/WaitDialog.cs @@ -27,25 +27,21 @@ ****************************************************************************/ using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Windows.Forms; using Microsoft.VisualStudio; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; -using Microsoft.VisualStudio.VCProjectEngine; -using QtVsTools.VisualStudio; namespace QtVsTools.Core { + using VisualStudio; + public class WaitDialog : IDisposable { static IVsThreadedWaitDialogFactory factory = null; - public IVsThreadedWaitDialog2 VsWaitDialog { get; private set; } + private IVsThreadedWaitDialog2 VsWaitDialog { get; set; } - public bool Running { get; private set; } + private bool Running { get; set; } bool? vsDialogCanceled = null; @@ -53,14 +49,15 @@ { get { + ThreadHelper.ThrowIfNotOnUIThread(); + if (vsDialogCanceled.HasValue) return vsDialogCanceled.Value; if (VsWaitDialog == null) return false; - bool canceled = false; - int res = VsWaitDialog.HasCanceled(out canceled); + int res = VsWaitDialog.HasCanceled(out bool canceled); if (res != VSConstants.S_OK) return false; @@ -76,6 +73,8 @@ static WaitDialog Create(IVsThreadedWaitDialogFactory dialogFactory) { + ThreadHelper.ThrowIfNotOnUIThread(); + if (factory == null) { factory = dialogFactory ?? VsServiceProvider .GetService<SVsThreadedWaitDialogFactory, IVsThreadedWaitDialogFactory>(); @@ -83,8 +82,7 @@ return null; } - IVsThreadedWaitDialog2 vsWaitDialog = null; - factory.CreateInstance(out vsWaitDialog); + factory.CreateInstance(out IVsThreadedWaitDialog2 vsWaitDialog); if (vsWaitDialog == null) return null; @@ -105,6 +103,8 @@ bool showMarqueeProgress = true, IVsThreadedWaitDialogFactory dialogFactory = null) { + ThreadHelper.ThrowIfNotOnUIThread(); + var dialog = Create(dialogFactory); if (dialog == null) return null; @@ -129,6 +129,8 @@ bool isCancelable = false, IVsThreadedWaitDialogFactory dialogFactory = null) { + ThreadHelper.ThrowIfNotOnUIThread(); + var dialog = Create(dialogFactory); if (dialog == null) return null; @@ -151,12 +153,13 @@ string statusBarText = null, bool disableCancel = false) { + ThreadHelper.ThrowIfNotOnUIThread(); + if (!Running) return; - bool canceled = false; int res = VsWaitDialog.UpdateProgress(message, progressText, - statusBarText, currentStep, totalSteps, disableCancel, out canceled); + statusBarText, currentStep, totalSteps, disableCancel, out bool canceled); if (res != VSConstants.S_OK) return; @@ -167,18 +170,22 @@ public void Stop() { + ThreadHelper.ThrowIfNotOnUIThread(); + if (!Running) return; Running = false; - int canceled = 0; - VsWaitDialog.EndWaitDialog(out canceled); + VsWaitDialog.EndWaitDialog(out int canceled); Canceled = (canceled != 0); } void IDisposable.Dispose() { - Stop(); + ThreadHelper.JoinableTaskFactory.Run(async () => { + await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + Stop(); + }); } } } -- Gitblit v1.9.1