c# - Windows 10 上的 BLE 服务器
问题描述
大家好,我正在尝试使用 Microsoft 的示例代码和在本网站 ( https://www.jenx.si/2019/08/09/bluetooth-gatt-server/ ) 中找到的教程在 Windows 10 上创建 BLE 服务器。问题是我可以使用桌面应用程序使服务器正常,但是当我尝试使用控制台示例代码时,我得到:
System.InvalidOperationException HResult=0x80131509 当任一应用程序没有控制台或控制台输入已被重定向时,无法读取密钥。试试 Console.Read。
错误。当我尝试继续按钮时,它会给我“找不到ExceptionDispatchInfo.cs”错误。任何人都可以帮助我解决这些错误。或者任何人都可以向我展示另一个示例,说明如何使用 C# 在控制台中的 Windows 10 上制作 BLE 服务器?
using Jenx.Bluetooth.GattServer.Common;
using System.Threading.Tasks;
namespace Jenx.Bluetooth.GattServer.Console
{
internal class Program
{
static private ILogger _logger;
static private IGattServer _gattServer;
private static async Task Main(string[] args)
{
InitializeLogger();
InitializeGattServer();
await StartGattServer();
await StartLooping();
}
#region Private
private static void InitializeLogger()
{
_logger = new ConsoleLogger();
}
private static void InitializeGattServer()
{
_gattServer = new Common.GattServer(GattCharacteristicIdentifiers.ServiceId, _logger);
_gattServer.OnChararteristicWrite += GattServerOnChararteristicWrite;
}
private static async Task StartGattServer()
{
try
{
await _logger.LogMessageAsync("Starting Initializong Jenx.si Bluetooth Gatt service.");
await _gattServer.Initialize();
await _logger.LogMessageAsync("Jenx.si Bluetooth Gatt service initialized.");
}
catch
{
await _logger.LogMessageAsync("Error starting Jenx.si Bluetooth Gatt service.");
throw;
}
await _gattServer.AddReadWriteCharacteristicAsync(GattCharacteristicIdentifiers.DataExchange, "Data exchange");
await _gattServer.AddReadCharacteristicAsync(GattCharacteristicIdentifiers.FirmwareVersion, "1.0.0.1", "Firmware Version");
await _gattServer.AddWriteCharacteristicAsync(GattCharacteristicIdentifiers.InitData, "Init info");
await _gattServer.AddReadCharacteristicAsync(GattCharacteristicIdentifiers.ManufacturerName, "Jenx.si", "Manufacturer");
_gattServer.Start();
await _logger.LogMessageAsync("Jenx.si Bluetooth Gatt service started.");
}
private static async Task StartLooping()
{
System.ConsoleKeyInfo cki;
System.Console.CancelKeyPress += new System.ConsoleCancelEventHandler(KeyPressHandler);
while (true)
{
await _logger.LogMessageAsync("Press any key, or 'X' to quit, or ");
await _logger.LogMessageAsync("CTRL+C to interrupt the read operation:");
cki = System.Console.ReadKey(true);
await _logger.LogMessageAsync($" Key pressed: {cki.Key}\n");
// Exit if the user pressed the 'X' key.
if (cki.Key == System.ConsoleKey.X) break;
}
}
private static async void KeyPressHandler(object sender, System.ConsoleCancelEventArgs args)
{
await _logger.LogMessageAsync("\nThe read operation has been interrupted.");
await _logger.LogMessageAsync($" Key pressed: {args.SpecialKey}");
await _logger.LogMessageAsync($" Cancel property: {args.Cancel}");
await _logger.LogMessageAsync("Setting the Cancel property to true...");
args.Cancel = true;
await _logger.LogMessageAsync($" Cancel property: {args.Cancel}");
await _logger.LogMessageAsync("The read operation will resume...\n");
}
private static async void GattServerOnChararteristicWrite(object myObject, CharacteristicEventArgs myArgs)
{
await _logger.LogMessageAsync($"Characteristic with Guid: {myArgs.Characteristic.ToString()} changed: {myArgs.Value.ToString()}");
}
private static void StopGattServer()
{
_gattServer.Stop();
}
#endregion Private
}
}
解决方案
推荐阅读
- java - Random.nextInt 从一本书看来是错误的
- express - Express.js - 如何为搜索过滤器调用多个参数?
- angular - 可观察检查是否正在加载?
- r - 合并从文件名添加日期信息的数据框
- html - 消除
...
带有 shell 命令的块 - javascript - 新的向多下拉菜单添加新选项不会出现
- javascript - 如何从我的网页中高精度打印文本?
- c# - OpenGL某些VertexBuffers不渲染
- haskell - 如何将 (Integer, Int, Int ) 转换为 Day。无法将预期类型 'Day' 与实际类型 '(Integer, Int, Int)' 匹配
- google-app-engine - 使用 appengineRun 运行 Spring Boot webapp