获取COM端口号(序列号,例如:COM1,COM2 ,,,) 单击按钮时,我想在UI上显示可用的COM端口列表。首先单击成功以获取COM编号,但第二次单击失败。你有什么理由吗?
这是一个测试两次点击的简单代码。
public async Task<bool> test()
{
Debug.WriteLine("Start");
var aqs = SerialDevice.GetDeviceSelector();
var dis = await DeviceInformation.FindAllAsync(aqs);
var port = await SerialDevice.FromIdAsync(dis[0].Id);
Debug.WriteLine("COM=" + port?.PortName);
var aqs2 = SerialDevice.GetDeviceSelector();
var dis2 = await DeviceInformation.FindAllAsync(aqs2);
var port2 = await SerialDevice.FromIdAsync(dis2[0].Id);
//port2 will be null
Debug.WriteLine("COM=" + port2?.PortName);
Debug.WriteLine("end");
return true;
}
public MainPage()
{
this.InitializeComponent();
Task.Run(() => this.test()).Wait();
}
和Package.appxmanifext有此代码。
<Capability Name="internetClient" />
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>
这里是执行结果。
Start
COM=COM15
COM=
end
This post也指出了同样的问题。我在这里写评论。但为了得到答案,我将其作为新问题发布。
问:要在设备更改时获取COM端口列表和更新列表,我应该编写什么代码?
答案 0 :(得分:0)
你有:
var aqs = SerialDevice.GetDeviceSelector();
var dis = await DeviceInformation.FindAllAsync(aqs);
var port = await SerialDevice.FromIdAsync(dis[0].Id);
Debug.WriteLine("COM=" + port?.PortName);
var aqs2 = SerialDevice.GetDeviceSelector();
var dis2 = await DeviceInformation.FindAllAsync(aqs);
var port2 = await SerialDevice.FromIdAsync(dis[0].Id);
Debug.WriteLine("COM="+port2?.PortName);
我认为你的意思是:
.....
var aqs2 = SerialDevice.GetDeviceSelector();
var dis2 = await DeviceInformation.FindAllAsync(aqs2);
var port2 = await SerialDevice.FromIdAsync(dis2[0].Id);
Debug.WriteLine("COM="+port2?.PortName);
答案 1 :(得分:0)
With this article,我在第一次和第二次通话之间添加了Dispose()。 现在,我得到了预期的结果。
我想&#34; SerialDevice.FromIdAsync&#34;意思是开放串口。 然后,第二次访问返回null。 然后我试着在重新开放前关闭它......
public async Task<bool> test()
{
Debug.WriteLine("Start");
var aqs = SerialDevice.GetDeviceSelector();
var dis = await DeviceInformation.FindAllAsync(aqs);
var port = await SerialDevice.FromIdAsync(dis[0].Id);
Debug.WriteLine("COM=" + port?.PortName);
//closing device...
port.Dispose();
port = null;
var aqs2 = SerialDevice.GetDeviceSelector();
var dis2 = await DeviceInformation.FindAllAsync(aqs2);
var port2 = await SerialDevice.FromIdAsync(dis2[0].Id);
//port2 will be null
Debug.WriteLine("COM="+port2?.PortName);
Debug.WriteLine("end");
return true;
}
这是结果(我预料到)。
Start
COM=COM15
COM=COM15
end
在UWP应用程序中,没有Open serial方法。 什么时候开门?是&#34; SerialDevice.FromIdAsync&#34; ??
另一个问题
有没有办法知道&#34; COM端口号&#34;没有打开设备? 没有&#34; SerialDevice.FromIdAsync&#34; ? 因为我只想制作COM1,COM2,COM3的下拉菜单....
更新1:
我找到了good example for UWP + Serial. 我会学习它:))