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.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs |   80 ++++++++++++++++++++++++---------------
 1 files changed, 49 insertions(+), 31 deletions(-)

diff --git a/QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs b/QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs
index 6a7cee4..0111f31 100644
--- a/QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs
+++ b/QtVsTools.Package/QML/Debugging/AD7/QmlDebugAD7Program.cs
@@ -29,18 +29,16 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading;
 using System.Windows.Threading;
 using Microsoft.VisualStudio;
 using Microsoft.VisualStudio.Debugger.Interop;
 using Microsoft.VisualStudio.Shell;
 using Microsoft.VisualStudio.Shell.Interop;
-using QtVsTools.VisualStudio;
 
 namespace QtVsTools.Qml.Debug.AD7
 {
+    using VisualStudio;
+
     sealed partial class Program : Disposable, IDebuggerEventSink,
 
         IDebugProgramNode2,  // "This interface represents a program that can be debugged."
@@ -64,21 +62,21 @@
 
         public QmlEngine Engine { get; private set; }
 
-        public List<StackFrame> CurrentFrames { get; private set; }
+        private List<StackFrame> CurrentFrames { get; set; }
 
-        public const string Name = "QML Debugger";
-        public Guid ProcessId { get; private set; }
+        private const string Name = "QML Debugger";
+        public Guid ProcessId { get; set; }
         public Guid ProgramId { get; set; }
-        public IDebugProcess2 NativeProc { get; private set; }
-        public uint NativeProcId { get; private set; }
-        public string ExecPath { get; private set; }
-        public string ExecArgs { get; private set; }
-        public IVsDebugger VsDebugger { get; private set; }
-        Dispatcher vsDebuggerThreadDispatcher;
+        private IDebugProcess2 NativeProc { get; set; }
+        private uint NativeProcId { get; set; }
+        private string ExecPath { get; set; }
+        private string ExecArgs { get; set; }
+        private IVsDebugger VsDebugger { get; set; }
+        private Dispatcher vsDebuggerThreadDispatcher;
 
-        private readonly static object criticalSectionGlobal = new object();
-        static bool originalBreakAllProcesses = BreakAllProcesses;
-        static int runningPrograms = 0;
+        private static readonly object criticalSectionGlobal = new object();
+        private static bool originalBreakAllProcesses = BreakAllProcesses;
+        private static int runningPrograms = 0;
 
         public static Program Create(
             QmlEngine engine,
@@ -114,8 +112,13 @@
                 return false;
 
             VsDebugger = VsServiceProvider.GetService<IVsDebugger>();
-            if (VsDebugger != null)
-                VsDebugger.AdviseDebugEventCallback(this as IDebugEventCallback2);
+            if (VsDebugger != null) {
+                ThreadHelper.JoinableTaskFactory.Run(async () =>
+                {
+                    await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
+                    VsDebugger.AdviseDebugEventCallback(this);
+                });
+            }
             vsDebuggerThreadDispatcher = Dispatcher.CurrentDispatcher;
 
             ProcessId = Guid.NewGuid();
@@ -141,8 +144,13 @@
         protected override void DisposeManaged()
         {
             Debugger.Dispose();
-            if (VsDebugger != null)
-                VsDebugger.UnadviseDebugEventCallback(this as IDebugEventCallback2);
+            if (VsDebugger != null) {
+                ThreadHelper.JoinableTaskFactory.Run(async () =>
+                {
+                    await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
+                    VsDebugger.UnadviseDebugEventCallback(this as IDebugEventCallback2);
+                });
+            }
 
             lock (criticalSectionGlobal) {
                 runningPrograms--;
@@ -161,9 +169,12 @@
         {
             var debugMode = new DBGMODE[1];
             int res = VSConstants.S_FALSE;
-            vsDebuggerThreadDispatcher
-                .BeginInvoke(new Action(() => res = VsDebugger.GetMode(debugMode)), new object[0])
-                .Wait();
+
+            QtVsToolsPackage.Instance.JoinableTaskFactory.Run(async () =>
+            {
+                await QtVsToolsPackage.Instance.JoinableTaskFactory.SwitchToMainThreadAsync();
+                res = VsDebugger.GetMode(debugMode);
+            });
 
             if (res != VSConstants.S_OK)
                 return false;
@@ -295,17 +306,24 @@
         {
             get
             {
-                return ((bool)QtVsToolsPackage.Instance.Dte
-                    .Properties["Debugging", "General"]
-                    .Item("BreakAllProcesses")
-                    .Value);
+                return ThreadHelper.JoinableTaskFactory.Run(async () => {
+                    await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
+                    return ((bool)QtVsToolsPackage.Instance.Dte
+                        .Properties["Debugging", "General"]
+                        .Item("BreakAllProcesses")
+                        .Value);
+                });
             }
             set
             {
-                QtVsToolsPackage.Instance.Dte
-                    .Properties["Debugging", "General"]
-                    .Item("BreakAllProcesses")
-                    .let_Value(value ? "True" : "False");
+                ThreadHelper.JoinableTaskFactory.Run(async () =>
+                {
+                    await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
+                    QtVsToolsPackage.Instance.Dte
+                        .Properties["Debugging", "General"]
+                        .Item("BreakAllProcesses")
+                        .let_Value(value ? "True" : "False");
+                });
             }
         }
 

--
Gitblit v1.9.1