Свойство класса, использующего MQTT, не возвращает правильное значение?C#

Место общения программистов C#
Ответить
Anonymous
 Свойство класса, использующего MQTT, не возвращает правильное значение?

Сообщение Anonymous »

Я разработал класс, использующий MQTT для получения значения темы.
Ниже приведен полный код:

Код: Выделить всё

using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Server;
using System;
using System.Threading.Tasks;

namespace ClassMQTTTest
{
public class ClassMQTT
{
private string broker;
private int brokerPort;
private string topic;
private string clientId = Guid.NewGuid().ToString();
private MqttFactory factory;
private MQTTnet.Client.MqttClient mqttClient;
private MQTTnet.Client.MqttClientOptions conexOptions;
private MQTTnet.Client.MqttClientConnectResult connectToMQTT;
public string topicValue;

//Constructor
public ClassMQTT(string broker, int brokerPort, string topic)
{
this.broker = broker;
this.brokerPort = brokerPort;
this.topic = topic;

factory = new MqttFactory();
mqttClient = (MQTTnet.Client.MqttClient)factory.CreateMqttClient();
conexOptions = new MqttClientOptionsBuilder()
.WithTcpServer(this.broker, this.brokerPort)
.WithCredentials("", "")
.WithClientId(clientId)
.WithCleanSession()
.Build();
}

private async Task procConnectToMQTT()
{
connectToMQTT = await mqttClient.ConnectAsync(this.conexOptions);
}

private bool isConnectedToMQTT()
{
return (connectToMQTT.ResultCode == MqttClientConnectResultCode.Success);
}

public async Task getTopicValue()
{
await procConnectToMQTT();

if (isConnectedToMQTT())
{
await mqttClient.SubscribeAsync(topic);
//Callback function when anything is publish on the topic
mqttClient.ApplicationMessageReceivedAsync += e =>
{
topicValue = e.ApplicationMessage.ConvertPayloadToString();
return Task.CompletedTask;
};
}
}
}
}
После этого на кнопке события формы у меня есть следующий код:

Код: Выделить всё

private async void button1_Click(object sender, EventArgs e)
{
ClassMQTTTest testMQTT = new ClassMQTTTest("xxxxxx", 000000, "topicTest");
await testMQTT.getTopicValue();
string vTopic = testMQTT.topicValue;
MessageBox.Show(vTopic);
}
Вызов MessageBox показывает пустую строку. Но при отладке метода getTopicValue() значение TopicValue присваивается правильно со значением
подписки на тему.
Назначение для "string vTopic = testMQTT.topicValue;" возвращает NULL !!!
Как получить назначение vTopic в getTopicValue()???
Заранее спасибо

Подробнее здесь: https://stackoverflow.com/questions/790 ... rect-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»