【问题标题】:streamOut.FlushAsync() not implemented exceptionstreamOut.FlushAsync() 未实现异常
【发布时间】:2016-06-05 13:13:39
【问题描述】:

我正在开发 USB 通信 UWP APP。我可以毫无问题地获取 SerialDevice 实例,但是当我调用 myDevice.OutputStream.FlushAsync() 时,我没有得到已实现的异常。

这是我的代码

private async void EstablishConButton_Click(object sender, RoutedEventArgs e)
    {
        var DeviceSelector = SerialDevice.GetDeviceSelector();
        var Devices = await DeviceInformation.FindAllAsync(DeviceSelector);
        var deviceInfo = Devices.FirstOrDefault();

        SerialDevice myDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);

        if (myDevice == null)
        {
            Debugg("Device not found!");
            return;
        }
        Debugg("Device found!");

        byte[] buffer = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05 , 0x05 , 0x05 , 0x05 , 0x05 , 0x05 };
        var rBuffer = (buffer).AsBuffer();
        await myDevice.OutputStream.WriteAsync(rBuffer);

        await myDevice.OutputStream.FlushAsync();

        var responseBufer = (new byte[11]).AsBuffer();
        await myDevice.InputStream.ReadAsync(responseBufer, 11,InputStreamOptions.None);

    }

我的清单:

<DeviceCapability Name="usb">
        <Device Id="vidpid:0403 6015">
            <Function Type="name:vendorSpecific" />
        </Device>
    </DeviceCapability>

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

感谢回复

【问题讨论】:

    标签: usb uwp notimplementedexception


    【解决方案1】:

    msdn 上说“要写入数据,首先使用 OutputStream 属性从 SerialDevice 对象获取输出流,然后使用 DataWriter 对象写入实际缓冲区。”

    所以尝试使用 DataWriter,您的代码将如下所示:

    var DeviceSelector = SerialDevice.GetDeviceSelector();
    var Devices = await DeviceInformation.FindAllAsync(DeviceSelector);
    var deviceInfo = Devices.FirstOrDefault();
    
    SerialDevice myDevice = await SerialDevice.FromIdAsync(deviceInfo.Id);
    
    if (myDevice == null)
    {
        Debug.WriteLine("Device not found!");
        return;
    }
    Debug.WriteLine("Device found!");
    
    byte[] buffer = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05 };
    var rBuffer = (buffer).AsBuffer();
    
    using (var dataWriter = new DataWriter(myDevice.OutputStream))
    {
        dataWriter.WriteBuffer(rBuffer);
    }
    
    var responseBufer = (new byte[11]).AsBuffer();
    await myDevice.InputStream.ReadAsync(responseBufer, 11, InputStreamOptions.None);
    

    在这里您不必调用 dataWriter.FlushAsync() 因为它假设在处理时自动刷新,但如果出现任何问题 - 添加刷新并再次检查。

    【讨论】:

      【解决方案2】:

      讨论很晚,但在遇到同样的问题后,在我的搜索中没有发现任何有用的东西,这就是我的结论......

      问题是字节实际上并没有使用写入命令发送(至少不是立即发送)。

      对 writer.FlushAsync() 的调用确实会导致字节输出,但随后会引发 NotImplementedException。

      答案是:writer.StoreAsync()。这会导致字节立即传输,更重要的是,不会引发异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        • 2010-12-25
        • 2017-12-12
        相关资源
        最近更新 更多