rskibbe.IO.Ports.Com.System.Windows – Detecting COM port additions & removals in .NET
Inhaltsverzeichnis
What is this package about?
This package is trying to provide you the best and easiest helpers, to react to COM port changes, whether it be connections or removals – as well as listing ports. As you can already see by the name, it is a sub-package of „rskibbe.IO.Ports.Com“.
Quick example
Without much blabla, we will now dive into a quick usage example of this (sub) package. If you need more details, just hop to the specific sections of this article.
Step 1 – Install the package
Open the NuGet Package Manager and run the following commands (or just use the UI):
Install-Package rskibbe.IO.Ports.Com.System.Windows // You may need to install this as well // trying to fix this for the future Install-Package System.Management
Step 2 – Using the code
In the next step, you need to create an instance of „WindowsSystemComPorts“ like shown in the example below. Still – keep in mind, that this package is a sub package which can be fused together with another one to combine even more functionality.
For sure you can also use it more or less on its own – like only for physical COM ports.
Import
Now go ahead and import the mentioned class by using the corresponding namespace:
using rskibbe.IO.Ports.Com.System.Windows;
Create an instance
In the next step, you can create an instance by using the provided factory method:
var comPorts = await WindowsSystemComPorts.BuildAsync();
Keep an eye on the SynchronizationContext-Parameter of the
BuildAsync
-Method. It defaults to the current one!
Attach handlers
Now you can easily attach your handlers of desire as usual:
// create some handler methods private void ComPort_Added(object sender, ComPortEventArgs e) { // access the changed portName "COM3" // e.PortName // access the changed portId "COM3" -> 3 // e.PortId } private void ComPort_Removed(object sender, ComPortEventArgs e) { // access the changed portName "COM3" // e.PortName // access the changed portId "COM3" -> 3 // e.PortId } // somewhere.. comPorts.SystemComPortAdded += ComPort_Added; comPorts.SystemComPortRemoved += ComPort_Removed;
Full code example
I’ve put together some copy and paste ready „Form1“ code for you here. Don’t forget to change the namespaces to your app, if you copy everything
using rskibbe.IO.Ports.Com.System.Windows; using System.Diagnostics; namespace YourProjectNamespaceHere; public partial class Form1 : Form { protected WindowsSystemComPorts _windowsSystemComPorts; public Form1() { InitializeComponent(); Load += Form1_Load; } private async void Form1_Load(object? sender, EventArgs e) { _windowsSystemComPorts = await WindowsSystemComPorts.BuildAsync(); _windowsSystemComPorts.SystemComPortAdded += (s, e) => { Debug.WriteLine($"{nameof(_windowsSystemComPorts.SystemComPortAdded)}: {e.PortName}"); }; _windowsSystemComPorts.SystemComPortRemoved += (s, e) => { Debug.WriteLine($"{nameof(_windowsSystemComPorts.SystemComPortRemoved)}: {e.PortName}"); }; } }