p36 2019-05-27 10:31 采纳率: 0%
浏览 509

c# uwp串口通信 SerialDevice.FromIdAsync取得null 加了Package.appxmanifest也没有用

图片说明图片说明

        SerialDevice device = null;
        DataReader reader = null;

        private async void initAsync()
        {
            var aqsFilter = SerialDevice.GetDeviceSelector("COM3");
            var devices = await DeviceInformation.FindAllAsync(aqsFilter);
            if (devices.Any())
            {
                var deviceId = devices.First().Id;
                this.device = await SerialDevice.FromIdAsync(deviceId);

                if (this.device != null)
                {
                    this.device.BaudRate = 9600;
                    this.device.StopBits = SerialStopBitCount.One;
                    this.device.DataBits = 8;
                    this.device.Parity = SerialParity.None;
                    this.device.Handshake = SerialHandshake.None;

                    this.reader = new DataReader(this.device.InputStream);
                }
            }
        }
  <Capabilities>
    <DeviceCapability Name="serialcommunication">
      <Device Id="any">
        <Function Type="name:serialPort" />
      </Device>
    </DeviceCapability>
  </Capabilities>
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 21:07
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在你的代码中,你尝试使用await关键字来获取设备ID。这似乎是一个错误的语法。你应该使用GetDeviceSelector方法而不是FromIdAsync方法。此外,你需要确保你在调用FindAllAsync之前已经正确设置了过滤器。

    以下是修复后的代码:

    // ...
    var filter = SerialDevice.GetDeviceSelector("COM3");
    var devices = await DeviceInformation.FindAllAsync(filter);
    if (devices.Any())
    {
        var deviceId = devices.First().Id;
        // ...
    
        this.device = await SerialDevice.FromIdAsync(deviceId);
    
        if (this.device != null)
        {
            this.device.BaudRate = 9600;
            this.device.StopBits = SerialStopBitCount.One;
            this.device.DataBits = 8;
            this.device.Parity = SerialParity.None;
            this.device.Handshake = SerialHandshake.None;
    
            this.reader = new DataReader(this.device.InputStream);
        }
    }
    

    另外,你可能还需要添加一些其他必要的设置,例如reader.IsOpenreader.Read()等。请检查你的源代码以确保这些部分也被正确地处理。

    评论

报告相同问题?