Skip to content

Commit 42645e2

Browse files
committed
wmi is too slow to be usable
1 parent ae068ac commit 42645e2

File tree

1 file changed

+3
-62
lines changed

1 file changed

+3
-62
lines changed

SerialTool/MainForm.cs

Lines changed: 3 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System;
33
using System.IO;
44
using System.IO.Ports;
5-
using System.Management;
65
using System.Text;
76
using System.Threading.Tasks;
87
using System.Windows.Forms;
@@ -13,49 +12,10 @@ namespace SerialTool
1312
public partial class MainForm : Form
1413
{
1514
private SerialPort port;
16-
private ManagementEventWatcher portCreationWatcher;
17-
private ManagementEventWatcher portDeletionWatcher;
1815

1916
public MainForm()
2017
{
2118
InitializeComponent();
22-
23-
Task.Run(() =>
24-
{
25-
string query = "SELECT * FROM __InstanceCreationEvent WITHIN 1 WHERE TargetInstance isa \"WIN32_SerialPort\"";
26-
portCreationWatcher = new ManagementEventWatcher(query);
27-
portCreationWatcher.EventArrived += Watcher_SerialPortCreation;
28-
portCreationWatcher.Start();
29-
30-
query = "SELECT * FROM __InstanceDeletionEvent WITHIN 1 WHERE TargetInstance isa \"WIN32_SerialPort\"";
31-
portDeletionWatcher = new ManagementEventWatcher(query);
32-
portDeletionWatcher.EventArrived += Watcher_SerialPortDeletion;
33-
portDeletionWatcher.Start();
34-
});
35-
}
36-
37-
private void Watcher_SerialPortCreation(object sender, EventArrivedEventArgs e)
38-
{
39-
BeginInvoke((MethodInvoker)delegate
40-
{
41-
ManagementBaseObject target = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
42-
serialPortName.Items.Add(target.Properties["DeviceId"].Value.ToString());
43-
});
44-
}
45-
46-
private void Watcher_SerialPortDeletion(object sender, EventArrivedEventArgs e)
47-
{
48-
BeginInvoke((MethodInvoker)delegate
49-
{
50-
ManagementBaseObject target = (ManagementBaseObject)e.NewEvent.Properties["TargetInstance"].Value;
51-
string portName = target.Properties["DeviceId"].Value.ToString();
52-
if (serialPortName.Text.Equals(portName))
53-
{
54-
serialPortName.Text = string.Empty;
55-
CloseSerialPort();
56-
}
57-
serialPortName.Items.Remove(portName);
58-
});
5919
}
6020

6121
private void ShowSerialPorts()
@@ -263,28 +223,9 @@ private void TimeOut_CheckedChanged(object sender, EventArgs e)
263223

264224
private async void SerialPortName_SelectedIndexChanged(object sender, EventArgs e)
265225
{
266-
string description = string.Empty;
267-
string pnpDeviceID = string.Empty;
268-
string portName = serialPortName.Text;
269-
await Task.Run(() =>
270-
{
271-
string query = $"SELECT * FROM WIN32_SerialPort WHERE DeviceID=\"{portName}\"";
272-
using (var searcher = new ManagementObjectSearcher(query))
273-
{
274-
var ports = searcher.Get();
275-
foreach (var port in ports)
276-
{
277-
description = port.Properties["Description"].Value.ToString();
278-
pnpDeviceID = port.Properties["PNPDeviceID"].Value.ToString();
279-
break;
280-
}
281-
}
282-
});
283-
outputText.AppendText($"{description}");
284-
outputText.AppendText($"{Environment.NewLine}");
285-
outputText.AppendText($"{pnpDeviceID}");
286-
outputText.AppendText($"{Environment.NewLine}");
226+
await Task.CompletedTask;
227+
outputText.AppendText($"{serialPortName.Text} selected.");
287228
outputText.AppendText($"{Environment.NewLine}");
288229
}
289230
}
290-
}
231+
}

0 commit comments

Comments
 (0)