我正在尝试让Xamarin应用程序通过蓝牙从我们的自定义PCB接收大约10 kbps的SPP数据。 PCB上的BC127模块可以发送的最大数据包大小为255个字节,因此应用程序需要每隔25ms接收一个数据包。我正在使用数据包来分离数据,因此需要一次接收一个。

测试应用程序一直在尝试接收数据,但是有时在接收方法开始时返回数据时,接收流中有2个以上的数据包在等待。我的问题是,什么导致蓝牙接收方法的巨大延迟?我已经附上了下面的方法。连接到蓝牙模块后,该应用程序仅执行一会儿,而仅在while(true)循环中运行此方法。

public byte[] ReadBluetoothPacket()
    {
        int bytesAvailable = 0;
        while (bytesAvailable == 0)                                     // Wait for packet to arrive
        {
            bytesAvailable = stream.BaseInputStream.Available();        // Find out how big the packet is
        }
        byte[] result = new byte[bytesAvailable];
        _socket.InputStream.Read(result, 0, bytesAvailable);            // Add the bytes to the buffer
        return result;
    }

最佳答案

我认为问题是由于Android OS执行后台任务而导致我的接收线程受阻。由于原来只是一个间歇性问题,因此重写数据接收器以立即处理多个数据包即可解决该问题。

10-02 16:06