开发语言:C#
源码大小:184KB
本次赞助金额为:9 元
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有编译问题可以找我解决。QQ:78630559
源码大小:184KB
本次赞助金额为:9 元
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有编译问题可以找我解决。QQ:78630559
核心代码
public class BluetoothHepler { private BluetoothClient _bluetoothClient; private BluetoothDeviceInfo _connectedDevice; private NetworkStream _bluetoothStream; private Thread _receiveThread; private bool _isReceiving; // 事件定义 public event EventHandler<BluetoothDeviceInfo> DeviceDiscovered; public event EventHandler<bool> ConnectionStatusChanged; public event EventHandler<byte[]> DataReceived; public event EventHandler<string> LogMessage; /// <summary> /// 是否已连接到蓝牙设备 /// </summary> public bool IsConnected => _bluetoothClient?.Connected ?? false; /// <summary> /// 当前连接的设备 /// </summary> public BluetoothDeviceInfo ConnectedDevice => _connectedDevice; public BluetoothHepler() { _bluetoothClient = new BluetoothClient(); } /// <summary> /// 搜索附近的蓝牙设备 /// </summary> /// <returns>发现的蓝牙设备列表</returns> public List<BluetoothDeviceInfo> DiscoverDevices() { var devices = new List<BluetoothDeviceInfo>(); try { Log("开始搜索蓝牙设备..."); // 开始搜索 var discoveredDevices = _bluetoothClient.DiscoverDevices(); Log($"发现 {discoveredDevices.Count} 个蓝牙设备"); foreach (var device in discoveredDevices) { devices.Add(device); DeviceDiscovered?.Invoke(this, device); Log($"发现设备: {device.DeviceName} [地址: {device.DeviceAddress}]"); } } catch (Exception ex) { Log($"搜索蓝牙设备时出错: {ex.Message}"); } return devices; } /// <summary> /// 连接到指定的蓝牙设备 /// </summary> /// <param name="device">要连接的蓝牙设备</param> /// <param name="serviceGuid">服务GUID</param> /// <returns>是否连接成功</returns> public bool Connect(BluetoothDeviceInfo device, Guid serviceGuid) { if (IsConnected) { Disconnect(); } try { Log($"正在连接到设备: {device.DeviceName}..."); // 配对设备(如果需要) if (!device.Authenticated) { Log("设备未配对,尝试配对..."); var isPaired = BluetoothSecurity.PairRequest(device.DeviceAddress, null); if (!isPaired) { Log("配对请求被拒绝或失败"); return false; } Log("配对成功"); } // 连接到设备 _bluetoothClient.Connect(device.DeviceAddress, serviceGuid); if (_bluetoothClient.Connected) { _connectedDevice = device; _bluetoothStream = _bluetoothClient.GetStream(); // 启动接收线程 _isReceiving = true; _receiveThread = new Thread(ReceiveData); _receiveThread.Start(); Log($"已成功连接到设备: {device.DeviceName}"); ConnectionStatusChanged?.Invoke(this, true); return true; } } catch (Exception ex) { Log($"连接蓝牙设备时出错: {ex.Message}"); } return false; } /// <summary> /// 断开当前蓝牙连接 /// </summary> public void Disconnect() { try { if (_bluetoothClient != null && _bluetoothClient.Connected) { _isReceiving = false; _receiveThread?.Join(500); // 等待接收线程结束 _bluetoothStream?.Close(); _bluetoothClient.Close(); Log($"已断开与设备 {_connectedDevice?.DeviceName} 的连接"); ConnectionStatusChanged?.Invoke(this, false); } } catch (Exception ex) { Log($"断开蓝牙连接时出错: {ex.Message}"); } finally { _connectedDevice = null; _bluetoothStream = null; } } /// <summary> /// 发送数据到已连接的蓝牙设备 /// </summary> /// <param name="data">要发送的数据</param> /// <returns>是否发送成功</returns> public bool SendData(byte[] data) { if (!IsConnected || _bluetoothStream == null) { Log("未连接到蓝牙设备,无法发送数据"); return false; } try { _bluetoothStream.Write(data, 0, data.Length); _bluetoothStream.Flush(); Log($"已发送 {data.Length} 字节数据"); return true; } catch (Exception ex) { Log($"发送数据时出错: {ex.Message}"); Disconnect(); return false; } } /// <summary> /// 接收数据的线程方法 /// </summary> private void ReceiveData() { var buffer = new byte[1024]; try { while (_isReceiving && _bluetoothClient.Connected && _bluetoothStream != null) { // 检查是否有可读数据 if (_bluetoothStream.CanRead && _bluetoothStream.DataAvailable) { int bytesRead = _bluetoothStream.Read(buffer, 0, buffer.Length); if (bytesRead > 0) { var receivedData = new byte[bytesRead]; Array.Copy(buffer, receivedData, bytesRead); Log($"接收到 {bytesRead} 字节数据"); DataReceived?.Invoke(this, receivedData); } } else { Thread.Sleep(100); // 避免CPU占用过高 } } } catch (Exception ex) { Log($"接收数据时出错: {ex.Message}"); Disconnect(); } } /// <summary> /// 记录日志消息 /// </summary> /// <param name="message">日志消息</param> private void Log(string message) { var fullMessage = $"[{DateTime.Now:HH:mm:ss.fff}] {message}"; LogMessage?.Invoke(this, fullMessage); Console.WriteLine(fullMessage); } /// <summary> /// 释放资源 /// </summary> public void Dispose() { Disconnect(); _bluetoothClient?.Dispose(); _bluetoothClient = null; } }
视频教程,点击进入B站可以看高清视频
本文来自www.LuoFenMing.com