gpt4 book ai didi

c# - SerialDevice.FromIdAsync() 产生一个空串口

转载 作者:太空狗 更新时间:2023-10-30 00:13:59 29 4
gpt4 key购买 nike

尝试连接到串行端口时,我的代码发生了一些奇怪的事情。使用 Serial Sample 时,一切正常,并且在第一次尝试时就连接了。但是,使用我的代码,串口返回一个空值。

我找到了一个变通方法,方法是在 do 循环中嵌套写入串行端口的调用,直到串行端口不再为空并且它可以工作。平均需要 500 个循环才能连接,并且它始终连接。我知道这很危险,因为如果它始终为 null,就会出现无限循环,所以我尝试将 do 循环切换为 for 循环。对于 for 循环,它总是返回 null,即使我将它迭代 50,000 次也是如此。有没有其他人遇到过这个并找到了更好的解决方案?我正在连接到 Arduino Uno。

我不只是使用串行示例代码的原因是因为我想使用下拉菜单并使用端口名称而不是设备 ID 名称。我的代码如下。谢谢。

    //lists com ports
private async void listPorts()
{
try
{
string aqs = SerialDevice.GetDeviceSelector();
var dlist = await DeviceInformation.FindAllAsync(aqs);
status.Text = "Select a device and connect";

for (int i = 0; i < dlist.Count; i++)
{
var port = await SerialDevice.FromIdAsync(dlist[0].Id);
ConnectDevices.Items.Add(port.PortName);
}

comConnect.IsEnabled = true;
ConnectDevices.SelectedIndex = 0;
}
catch (Exception ex)
{
status.Text = ex.Message;
}
}

//connects to the selected com port
private async void comConnect_Click(object sender, RoutedEventArgs e)
{
_key = 0;
status2.Text = "";
string aqs = SerialDevice.GetDeviceSelector(ConnectDevices.SelectedItem.ToString());
var dlist = await DeviceInformation.FindAllAsync(aqs);
if (dlist.Count <= 0)
{
status.Text = "No devices found.";
return;
}
try
{
do
{
serialPort = await SerialDevice.FromIdAsync(dlist[0].Id);
status.Text = "Connecting to serial port...";
} while (serialPort == null);

// Configure serial settings
serialPort.WriteTimeout = TimeSpan.FromMilliseconds(1000);
serialPort.BaudRate = 38400;
serialPort.Parity = SerialParity.None;
serialPort.StopBits = SerialStopBitCount.One;
serialPort.DataBits = 8;
serialPort.Handshake = SerialHandshake.None;
status.Text = "Serial port configured successfully.";

我已将以下内容添加到 package.appmanifest

<Capabilities>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>

最佳答案

在我的项目中,在package.appmanifest中添加如下代码后,串口正常工作。

    <Capabilities>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>

串口变量应该是“serialPort”。

关于c# - SerialDevice.FromIdAsync() 产生一个空串口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37505107/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com