SerialDevice.FromIdAsync()产生一个空串行端口

Joh*_*use 4 c# serial-port uwp

尝试连接串口时,我的代码发生了一些奇怪的事情.使用串行样本时,一切正常,并在第一次尝试时连接.但是,使用我的代码,串行端口返回null.

我找到了一个解决方法,通过嵌套调用在do循环中写入串行端口,直到串行端口不再为null并且它可以工作.平均需要500个环路才能连接,并且它始终连接.我知道它很危险,因为如果它总是为空,则存在无限循环,所以我尝试将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.";
Run Code Online (Sandbox Code Playgroud)

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

<Capabilities>
 <DeviceCapability Name="serialcommunication">
  <Device Id="any">
   <Function Type="name:serialPort" />
  </Device>
 </DeviceCapability>
</Capabilities>
Run Code Online (Sandbox Code Playgroud)

林剑平*_*林剑平 11

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

    <Capabilities>
     <DeviceCapability Name="serialcommunication">
      <Device Id="any">
       <Function Type="name:serialPort" />
      </Device>
     </DeviceCapability>
    </Capabilities>
Run Code Online (Sandbox Code Playgroud)

串口变量应为"serialPort".


Ale*_*mer 0

此代码与我的 com 端口和 Arduino 配合良好:

string aqs = SerialDevice.GetDeviceSelector("COM3");
DeviceInformationCollection dlist = await DeviceInformation.FindAllAsync(aqs);

if (dlist.Any())
{
 deviceId = dlist.First().Id;
}

using (SerialDevice serialPort = await SerialDevice.FromIdAsync(deviceId))
{
// .....
}
Run Code Online (Sandbox Code Playgroud)

尝试指定com端口