【问题标题】:How to Read Data continuously from bluetooth device using windows phone 8如何使用 windows phone 8 从蓝牙设备连续读取数据
【发布时间】:2015-09-10 19:23:11
【问题描述】:

一个小应用程序,我有一个蓝牙设备,它会在我们做的时候发送连续的数据await _socket.OutputStream.WriteAsync(data) 但是我无法通过 windows phone 连续读取数据。

private async void writeData()
{
    string newLabel = "startReading,RFID\n";
    var data = GetBufferFromByteArray(Encoding.UTF8.GetBytes(newLabel));
    await _socket.OutputStream.WriteAsync(data);
    Thread.Sleep(500);
    readData();
}

private async void readData()
{
    var buffer = new Windows.Storage.Streams.Buffer(2048);
    var receivedSize = await _socket.InputStream.ReadAsync(buffer, 2048, InputStreamOptions.ReadAhead);
    // string s = Encoding.UTF8.GetString(receivedSize,0,receivedSize.Length);

    var dr = DataReader.FromBuffer(buffer);

    List<byte> lst = new List<byte>();
    byte[] bytes = new byte[] { };
    for (int i = 0; i < 2048; i++)
    {
        //bytes[i]=dr.ReadByte();
        lst.Add(dr.ReadByte());
    }
    byte[] dataAsBytes = lst.ToArray();
    // byte[] dataAsBytes = lst.SelectMany(s => System.Text.Encoding.UTF8.GetBytes(s)).ToArray();
    string s3 = Convert.ToBase64String(dataAsBytes);
    string result = System.Text.Encoding.UTF8.GetString(dataAsBytes, 0, 2048);

    Data_txtblcx.Text = result.ToString();
}

【问题讨论】:

  • 我可能会帮助你,但你没有提供足够的信息。 _socket 定义在哪里,它是什么? writeDatareadData 是如何调用的?应用程序在做什么,您期望/试图让它做什么?考虑阅读stackoverflow.com/help/how-to-ask

标签: c# .net windows-phone-8 async-await


【解决方案1】:

让我们尝试简化您的代码,看看我们是否不能让它以这种方式工作。以下是我为您整理的几个帮手:

public static async Task<byte[]> ReadFromSocket(StreamSocket socket)
{
    using (var output = new MemoryStream())
    {
        var bytesCopied = await RandomAccessStream.CopyAsync(socket.InputStream, output.AsOutputStream());
        if (bytesCopied > 0)
            return output.ToArray();
    }
    return new byte[0];
}

public static IAsyncOperationWithProgress<uint,uint> WriteToSocket(StreamSocket socket, byte[] bytes)
{
    return socket.OutputStream.WriteAsync(bytes.AsBuffer());
}

要使用它们,您的示例方法看起来更像这样:

private async Task writeData(StreamSocket socket)
{
    await WriteToSocket(socket, Encoding.UTF8.GetBytes("startReading,RFID\n"));

    await Task.Delay(500);

    await readData(socket);
}

private async Task readData(StreamSocket socket)
{
    byte[] dataAsBytes = await ReadFromSocket(socket);

    Data_txtblcx.Text = Encoding.UTF8.GetString(dataAsBytes, 0, dataAsBytes.Length > 2048 ? 2048 : dataAsBytes.Length);
}

但是,如果您的问题与您对套接字的处理有关,这将无济于事。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多