From 47cdef0959a757ea18c1f93f39873b1a2965c1a1 Mon Sep 17 00:00:00 2001 From: BlubbFish Date: Sun, 1 Dec 2019 17:53:57 +0100 Subject: [PATCH] Thread Abort in netcore is not working --- Changelog.md | 0 ConnectorDataMqtt/ConnectorDataMqtt.csproj | 1 + .../ConnectorDataMqtt_Core.csproj | 1 + ConnectorDataMqtt/Mqtt.cs | 19 ++++++++++++------- 4 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 Changelog.md diff --git a/Changelog.md b/Changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/ConnectorDataMqtt/ConnectorDataMqtt.csproj b/ConnectorDataMqtt/ConnectorDataMqtt.csproj index f45ec2d..4a1fa94 100644 --- a/ConnectorDataMqtt/ConnectorDataMqtt.csproj +++ b/ConnectorDataMqtt/ConnectorDataMqtt.csproj @@ -35,6 +35,7 @@ + diff --git a/ConnectorDataMqtt/ConnectorDataMqtt_Core.csproj b/ConnectorDataMqtt/ConnectorDataMqtt_Core.csproj index a7e51fe..a7570cd 100644 --- a/ConnectorDataMqtt/ConnectorDataMqtt_Core.csproj +++ b/ConnectorDataMqtt/ConnectorDataMqtt_Core.csproj @@ -24,6 +24,7 @@ + diff --git a/ConnectorDataMqtt/Mqtt.cs b/ConnectorDataMqtt/Mqtt.cs index bf65c82..6647309 100644 --- a/ConnectorDataMqtt/Mqtt.cs +++ b/ConnectorDataMqtt/Mqtt.cs @@ -11,9 +11,10 @@ namespace BlubbFish.Utils.IoT.Connector.Data { public class Mqtt : ADataBackend, IDisposable { private MqttClient client; private Thread connectionWatcher; + private Boolean connectionWatcherRunning; public Mqtt(Dictionary settings) : base(settings) { - Console.WriteLine("ConnectorDataMqtt_constr("+this.ToString()+")"); + Console.WriteLine("BlubbFish.Utils.IoT.Connector.Data.Mqtt(" + this.ToString()+")"); Int32 port = 1883; if(this.settings.ContainsKey("port")) { port = Int32.Parse(this.settings["port"]); @@ -44,22 +45,23 @@ namespace BlubbFish.Utils.IoT.Connector.Data { #region ConectionManage private void ConnectionWatcher() { this.connectionWatcher = new Thread(this.ConnectionWatcherRunner); + this.connectionWatcherRunning = true; this.connectionWatcher.Start(); } private void ConnectionWatcherRunner() { - while(true) { + while(this.connectionWatcherRunning) { try { if(!this.IsConnected) { this.Reconnect(); + Thread.Sleep(1000); } - Thread.Sleep(500); + Thread.Sleep(10); } catch(Exception) { } } } private void Reconnect() { - Console.WriteLine("ConnectorDataMqtt_Reconnect(" + this.ToString() + ")"); if(this.IsConnected) { this.Disconnect(true); } else { @@ -69,7 +71,7 @@ namespace BlubbFish.Utils.IoT.Connector.Data { } private void Disconnect(Boolean complete) { - Console.WriteLine("ConnectorDataMqtt_Disconnect(" + this.ToString() + ")"); + Console.WriteLine("BlubbFish.Utils.IoT.Connector.Data.Disconnect(" + this.ToString() + ")"); this.client.MqttMsgPublishReceived -= this.Client_MqttMsgPublishReceived; this.Unsubscripe(); if(complete) { @@ -78,7 +80,7 @@ namespace BlubbFish.Utils.IoT.Connector.Data { } private void Connect() { - Console.WriteLine("ConnectorDataMqtt_Connect(" + this.ToString() + ")"); + Console.WriteLine("BlubbFish.Utils.IoT.Connector.Data.Connect(" + this.ToString() + ")"); this.client.MqttMsgPublishReceived += this.Client_MqttMsgPublishReceived; _ = this.settings.ContainsKey("user") && this.settings.ContainsKey("pass") ? this.client.Connect(Guid.NewGuid().ToString(), this.settings["user"], this.settings["pass"]) @@ -127,7 +129,10 @@ namespace BlubbFish.Utils.IoT.Connector.Data { if(!this.disposedValue) { if(disposing) { try { - this.connectionWatcher.Abort(); + this.connectionWatcherRunning = false; + while(this.connectionWatcher.IsAlive) { + Thread.Sleep(10); + } this.connectionWatcher = null; this.Disconnect(true); } catch (Exception) { }