streamOut.FlushAsync()未实现异常

时间:2016-06-05 13:13:39

标签: usb uwp notimplementedexception

我正在研发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>

感谢您的回复

2 个答案:

答案 0 :(得分:0)

它在msdn上说&#34;要写入数据,首先使用OutputStream属性从SerialDevice对象获取输出流,然后使用DataWriter对象写入实际的缓冲区。&#34; < / p>

因此,尝试使用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(),因为它假设在处理时自动刷新,但是如果出现任何问题 - 添加刷新并再次检查。

答案 1 :(得分:0)

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

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

对 writer.FlushAsync() 的调用确实导致字节流出,但随后抛出 NotImplementedException。

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