Наша сборка Qt VS Tools
giy
2022-09-02 ca47896204482bf4a6979e3838bf7f09f61cebeb
QtVsTools.Package/QML/Debugging/V4/QmlDebugV4Client.cs
@@ -26,14 +26,9 @@
**
****************************************************************************/
using QtVsTools.Options;
using System;
using System.Collections.Concurrent;
using System.IO;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
@@ -62,7 +57,7 @@
        IConnectionEventSink sink;
        IntPtr client;
        Task clientThread;
        EventWaitHandle clientCreated = new EventWaitHandle(false, EventResetMode.ManualReset);
        readonly EventWaitHandle clientCreated = new EventWaitHandle(false, EventResetMode.ManualReset);
        EventWaitHandle clientConnected;
        public uint? ThreadId { get; private set; }
@@ -82,7 +77,7 @@
                if (state != value) {
                    var oldState = state;
                    state = value;
                    Task.Run(() => sink.NotifyStateTransition(this, oldState, value));
                    _ = Task.Run(() => sink.NotifyStateTransition(this, oldState, value));
                }
            }
        }
@@ -100,14 +95,17 @@
        {
            this.sink = sink;
            Task.WaitAny(new[]
            QtVsToolsPackage.Instance.JoinableTaskFactory.Run(async () =>
            {
                // Try to start client thread
                // Unblock if thread was abruptly terminated (e.g. DLL not found)
                clientThread = Task.Run(() => ClientThread()),
                await Task.WhenAny(new[]
                {
                    // Try to start client thread
                    // Unblock if thread was abruptly terminated (e.g. DLL not found)
                    clientThread = Task.Run(() => ClientThread()),
                // Unblock if client was created (i.e. client thread is running)
                Task.Run(() => clientCreated.WaitOne())
                    // Unblock if client was created (i.e. client thread is running)
                    Task.Run(() => clientCreated.WaitOne())
                });
            });
            if (State == DebugClientState.Unavailable) {
@@ -135,7 +133,9 @@
        {
            if (State != DebugClientState.Unavailable) {
                NativeMethods.DebugClientShutdown(client);
                clientThread.Wait();
                QtVsToolsPackage.Instance.JoinableTaskFactory.Run(
                    async () => await Task.WhenAll(new[] { clientThread }));
            }
        }
@@ -180,7 +180,7 @@
            var hostNameData = Encoding.UTF8.GetBytes(hostName);
            uint timeout = (uint)QtVsToolsPackage.Instance.Options.QmlDebuggerTimeout;
            Task.Run(() =>
            _ = Task.Run(() =>
            {
                var connectTimer = new System.Diagnostics.Stopwatch();
                connectTimer.Start();
@@ -246,7 +246,7 @@
            uint timeout = (uint)QtVsToolsPackage.Instance.Options.QmlDebuggerTimeout;
            if (timeout != 0) {
                Task.Run(() =>
                _ = Task.Run(() =>
                {
                    var connectTimer = new System.Diagnostics.Stopwatch();
                    connectTimer.Start();