Skip to content

Instantly share code, notes, and snippets.

@cwschroeder
Last active February 12, 2026 09:59
Show Gist options
  • Select an option

  • Save cwschroeder/7b5117dca561c01def041e7d4c6d2771 to your computer and use it in GitHub Desktop.

Select an option

Save cwschroeder/7b5117dca561c01def041e7d4c6d2771 to your computer and use it in GitHub Desktop.
Example of a C# MQTT client
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
// including the M2Mqtt Library
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
MqttClient client;
string clientId;
// this code runs when the main window opens (start of the app)
public MainWindow()
{
InitializeComponent();
string BrokerAddress = "test.mosquitto.org";
client = new MqttClient(BrokerAddress);
// register a callback-function (we have to implement, see below) which is called by the library when a message was received
client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
// use a unique id as client id, each time we start the application
clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
}
// this code runs when the main window closes (end of the app)
protected override void OnClosed(EventArgs e)
{
client.Disconnect();
base.OnClosed(e);
App.Current.Shutdown();
}
// this code runs when the button "Subscribe" is clicked
private void btnSubscribe_Click(object sender, RoutedEventArgs e)
{
if (txtTopicSubscribe.Text != "")
{
// whole topic
string Topic = "/ElektorMyJourneyIoT/" + txtTopicSubscribe.Text + "/test";
// subscribe to the topic with QoS 2
client.Subscribe(new string[] { Topic }, new byte[] { 2 }); // we need arrays as parameters because we can subscribe to different topics with one call
txtReceived.Text = "";
}
else
{
System.Windows.MessageBox.Show("You have to enter a topic to subscribe!");
}
}
// this code runs when the button "Publish" is clicked
private void btnPublish_Click(object sender, RoutedEventArgs e)
{
if (txtTopicPublish.Text != "")
{
// whole topic
string Topic = "/ElektorMyJourneyIoT/" + txtTopicPublish.Text + "/test";
// publish a message with QoS 2
client.Publish(Topic, Encoding.UTF8.GetBytes(txtPublish.Text), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, true);
}
else
{
System.Windows.MessageBox.Show("You have to enter a topic to publish!");
}
}
// this code runs when a message was received
void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
string ReceivedMessage = Encoding.UTF8.GetString(e.Message);
Dispatcher.Invoke(delegate { // we need this construction because the receiving code in the library and the UI with textbox run on different threads
txtReceived.Text = ReceivedMessage;
});
}
}
}
@cwschroeder

cwschroeder commented Sep 14, 2020 via email

Copy link
Copy Markdown
Author

ghost commented Sep 14, 2020

Copy link
Copy Markdown

Ye my bad. Read that shortly after too. Although all the examples I saw started with the root "/"... Quiet the reason why i deleted that comment as it was unnecessary and wrong at that point. Sorry

@tyriong

tyriong commented Feb 17, 2021

Copy link
Copy Markdown

hi I got error at txtTopicSubscribe.Text and other .Text like txtReceived, txtPublish and others. It says the name does not exist. Did I miss any using library? I only install m2mqtt Nuget package.

i tried this https://gist.github.com/cwschroeder/7b5117dca561c01def041e7d4c6d2771#gistcomment-2790033 but still same error.

@tyriong

tyriong commented Feb 22, 2021

Copy link
Copy Markdown

hi I got error at txtTopicSubscribe.Text and other .Text like txtReceived, txtPublish and others. It says the name does not exist. Did I miss any using library? I only install m2mqtt Nuget package.

i tried this https://gist.github.com/cwschroeder/7b5117dca561c01def041e7d4c6d2771#gistcomment-2790033 but still same error.

in reply to this, i learned that those supposed .Text is where textbox should be linked. Sorry I'm a self-learnt newbie, just thought it would be useful to share here too

@kamleshjha2020

kamleshjha2020 commented Mar 26, 2021

Copy link
Copy Markdown

protected override void OnClosed(EventArgs e)
{
client.Disconnect();

        base.OnClosed(e);
        App.Current.Shutdown();
      
    }

In the above code App does not exist how to solve it please tell me.

@tyriong

tyriong commented Mar 31, 2021

Copy link
Copy Markdown

protected override void OnClosed(EventArgs e)
{
client.Disconnect();

        base.OnClosed(e);
        App.Current.Shutdown();
      
    }

In the above code App does not exist how to solve it please tell me.

I think if you dont use any app in your program you can just exclude the code

@TomerHaber84

Copy link
Copy Markdown

if my broker return object ? how to handle this in the callback event ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment