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