有啥方法可以从 Windows 10 中的 c# 桌面应用程序使用蓝牙 LE?
Posted
技术标签:
【中文标题】有啥方法可以从 Windows 10 中的 c# 桌面应用程序使用蓝牙 LE?【英文标题】:Is there any way to use Bluetooth LE from a c# desktop app in windows 10?有什么方法可以从 Windows 10 中的 c# 桌面应用程序使用蓝牙 LE? 【发布时间】:2016-09-16 22:07:01 【问题描述】:我在网上找到的所有关于蓝牙 LE 的东西都需要一个通用的 windows 应用程序,这完全不适合我。
有没有办法在 C# 中使用蓝牙 LE,而不必像在 UWP 上那样编写整个应用程序?
【问题讨论】:
【参考方案1】:您可以在 C# 桌面应用程序中使用 C# API!我有一个sample here in GitHub。
一般来说,要访问 C# APIS,请向您的项目添加两个引用:
C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
请注意,#2 版本取决于您使用的 .NET 版本。
不支持后台任务,但所有其他蓝牙 C# 功能应该在那里。
【讨论】:
我试过了。在 Windows 8 上工作,但无法在 Windows 10 上工作。我不知道我做错了什么。此外,蓝牙 LE api 在 Windows 8 中受到严重限制。因此,虽然我可以针对 Windows 8 并仍然在 Windows 10 中运行,但这对我来说不起作用。我需要使用 Windows 10 的蓝牙 LE api @CedricMamo 自己尝试过这样做 - 现在更新答案! 似乎 #2 可以在我的操作系统上的不同路径下找到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
从 PowerShell 访问它需要什么?
如果我添加这两个引用,我仍然无法访问Windows.Devices
【参考方案2】:
自 XP 时代以来,我一直在使用并围绕 Microsoft 部分蓝牙 API 解决方案工作。我从 BTFramework 中找到了一个我在许多平台和多种语言中广泛使用的库。 BTFramework 的蓝牙经典和低功耗 API 包易于使用、非常可靠,并且它们对我发现的任何缺陷都反应迅速。因此,我们的商业产品从蓝牙端出现的故障为零。 BTFramework 的团队已经着手解决微软对该标准的部分实施。顺便说一下,我们主要用 C# dot NET 编写代码。而且我们在应用程序中使用了很多线程。
【讨论】:
感谢您的参考。有时,解决一个特别棘手的问题的第三方解决方案是明智的答案。我会检查他们...【参考方案3】:Look at the code below this shows how to scan and connect to a ble device using winform application
using System;
using System.Windows.Forms;
using Windows.Devices.Bluetooth;
using Windows.Devices.Bluetooth.GenericAttributeProfile;
using Windows.Devices.Enumeration;
namespace TestBle
public partial class Form1 : Form
public Form1()
InitializeComponent();
private async void button1_ClickAsync(object sender, EventArgs e)
string[] requestedProperties = "System.Devices.Aep.DeviceAddress", "System.Devices.Aep.IsConnected" ;
DeviceWatcher deviceWatcher =
DeviceInformation.CreateWatcher(
BluetoothLEDevice.GetDeviceSelectorFromPairingState(false),
requestedProperties,
DeviceInformationKind.AssociationEndpoint);
// Register event handlers before starting the watcher.
// Added, Updated and Removed are required to get all nearby devices
deviceWatcher.Added += DeviceWatcher_Added;
deviceWatcher.Updated += DeviceWatcher_Updated;
deviceWatcher.Removed += DeviceWatcher_Removed;
deviceWatcher.EnumerationCompleted += DeviceWatcher_EnumerationCompleted;
deviceWatcher.Stopped += DeviceWatcher_Stopped;
// Start the watcher.
deviceWatcher.Start();
private void DeviceWatcher_Stopped(DeviceWatcher sender, object args)
//throw new NotImplementedException();
private void DeviceWatcher_EnumerationCompleted(DeviceWatcher sender, object args)
string a = "";
private void DeviceWatcher_Removed(DeviceWatcher sender, DeviceInformationUpdate args)
string a = "";
private void DeviceWatcher_Updated(DeviceWatcher sender, DeviceInformationUpdate args)
string a = "";
private async void DeviceWatcher_Added(DeviceWatcher sender, DeviceInformation args)
string[] split = args.Id.Split('-');
if(split[1] == "84:2e:14:aa:65:13")
BluetoothLEDevice bluetoothLeDevice = await BluetoothLEDevice.FromIdAsync(args.Id);
GattDeviceServicesResult result = await bluetoothLeDevice.GetGattServicesAsync();
if (result.Status == GattCommunicationStatus.Success)
var services = result.Services;
// ...
`enter code here`
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于有啥方法可以从 Windows 10 中的 c# 桌面应用程序使用蓝牙 LE?的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以使用 C# 获取 Windows Phone 设备的 IMEI 号码
有啥方法可以调试从 C# DllImport 调用的 c++ dll?
有啥方法可以为 c# .NET 中的特定数据库表自动生成 BLL 类?