C# UWP,设备COM端口号在第二次呼叫SerialDevice.FromIdAsync中为空
获取COM端口号(序列号,例如:COM1、COM2、、、) 单击按钮时,我想在UI上显示可用COM端口列表。第一次单击成功以获取COM编号,但第二次单击失败。你有什么理由吗 下面是一个测试双击的简单代码C# UWP,设备COM端口号在第二次呼叫SerialDevice.FromIdAsync中为空,c#,xaml,uwp,serial-port,C#,Xaml,Uwp,Serial Port,获取COM端口号(序列号,例如:COM1、COM2、、、) 单击按钮时,我想在UI上显示可用COM端口列表。第一次单击成功以获取COM编号,但第二次单击失败。你有什么理由吗 下面是一个测试双击的简单代码 public async Task<bool> test() { Debug.WriteLine("Start"); var aqs = SerialDevice.GetDeviceSelector(); var dis = await DeviceInf
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();
}
也指出了同样的问题。我在这里写了评论。但为了得到答案,我把这个作为新问题发布
Q:要在设备更改时获取COM端口列表和更新列表,我应该编写什么代码?您有:
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);
你有:
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);
我在第一次和第二次调用之间添加了Dispose()。
现在,我得到了预期的结果
Start
COM=COM15
COM=
end
我以为“SerialDevice.FromIdAsync”是指打开的串行端口。
然后,第二次访问返回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;
}
在UWP应用中,没有开放的串行方法。
什么时候开门?是“SerialDevice.FromIdAsync”吗
另一个问题
有没有办法不打开设备就知道“COM端口号”?
没有“SerialDevice.FromIdAsync”?
因为我只想做COM1,COM2,COM3的下拉菜单
更新1:
我找到了一个
我将学习:)我在第一次和第二次调用之间添加了Dispose()。
现在,我得到了预期的结果
Start
COM=COM15
COM=
end
我以为“SerialDevice.FromIdAsync”是指打开的串行端口。
然后,第二次访问返回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;
}
在UWP应用中,没有开放的串行方法。
什么时候开门?是“SerialDevice.FromIdAsync”吗
另一个问题
有没有办法不打开设备就知道“COM端口号”?
没有“SerialDevice.FromIdAsync”?
因为我只想做COM1,COM2,COM3的下拉菜单
更新1:
我找到了一个
我会学的:):)你说得对,呵呵。。抱歉,我的测试应用程序错误。。。但结果是一样的。。。我修改了我的上述代码。:)你是对的,呵呵。。抱歉,我的测试应用程序错误。。。但结果是一样的。。。我修改了我的上述代码。