Я работал над небольшим кусочком кода в Xamarin Forms (Visual Studio - мой первый проект) для отправки mqtt-сообщения после нажатия кнопки.Я написал код для публикации сообщения mqtt на сервере test.mosquitto.org в консольном приложении C #, и он отлично работает
using System;
using System.Net.Mqtt;
using System.Text;
namespace MqttTest.Client
{
class Program
{
const string topic = "test/test/button";
static void Main (string[] args)
{
var config = new MqttConfiguration { Port = 1883 };
var client = MqttClient.CreateAsync("test.mosquitto.org", config).Result;
var clientId = "myClientID";
string message = "test";
client.ConnectAsync (new MqttClientCredentials (clientId)).Wait ();
client.SubscribeAsync (topic, MqttQualityOfService.AtLeastOnce).Wait ();
//Publishes "message" Var
client.PublishAsync(new MqttApplicationMessage(topic, Encoding.UTF8.GetBytes($"{message}")), MqttQualityOfService.AtLeastOnce).Wait();
}
}
}
Теперь я написал очень простое кроссплатформенное приложение xamarin с 1 кнопкой, 1событие button_clicked и код события clicked кнопки, которое было записано в вышеуказанном консольном приложении.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using System.Net.Mqtt;
namespace App1
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
const string topic = "test/test/button";
private void Button_Clicked(object sender, EventArgs e)
{
var config = new MqttConfiguration { Port = 1883 };
var client = MqttClient.CreateAsync("test.mosquitto.org", config).Result;
var clientId = "clientIdhGHvpYY9uM";
string message = "Hello";
client.ConnectAsync(new MqttClientCredentials(clientId)).Wait();
client.SubscribeAsync(topic, MqttQualityOfService.AtLeastOnce).Wait();
client.PublishAsync(new MqttApplicationMessage(topic, Encoding.UTF8.GetBytes($"{message}")), MqttQualityOfService.AtLeastOnce).Wait();
}
}
}
После тестирования приложения в эмуляторе оно загружается нормально, но когда я нажимаю кнопку, оно зависает (Я не могу повторно нажать на кнопку) приложение и не публикует его на тестовом mqtt-сервере.
Может кто-нибудь предложить какой-либо совет, как это работает
спасибо