2016-06-05 3 views
1

Я работаю над UWP-приложением USB-связи. Я могу получить экземпляр SerialDevice без проблем, но когда я вызываю myDevice.OutputStream.FlushAsync(), я получаю исключение без реализации.streamOut.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> 

Спасибо за ответ

ответ

0

Он сказал на msdn, что «Для того, чтобы записать данные, сначала нужно получить выходной поток из SerialDevice объект, используя свойство OutputStream, а затем используйте объект 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(), потому что это, предполагают, чтобы автоматически вровень во время утилизации, но если возникают проблемы - добавьте промывку и проверьте еще раз.

Смежные вопросы