You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台程序获取Windows设备传感器数据的可用API咨询

适用于C#控制台应用的Windows传感器API方案

我完全懂你的烦恼——搜了一堆资料全是UWP的传感器实现,但自己写的是控制台应用,这确实有点卡壳。不过其实不用慌,Windows的传感器核心API是可以在.NET控制台应用里用的,只要你的项目是基于.NET 5+或者.NET Core 3.1及以上版本,配置一下就能直接调用。

下面给你详细说下可行的方案:

  • 核心API选择:Windows.Devices.Sensors命名空间
    就是你之前看到的UWP那套传感器API,它本质是WinRT API,现在.NET已经原生支持WinRT调用了。不管是陀螺仪(Gyrometer)、重力传感器(GravitySensor),还是加速度计、磁力计这些常用传感器,都能在这个命名空间找到对应的实现类。

  • 控制台应用启用WinRT支持的配置
    如果你用的是.NET 5+版本,只需要在项目的.csproj文件里添加以下配置:

    <PropertyGroup>
      <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
      <UseWindowsForms>false</UseWindowsForms>
      <UseWPF>false</UseWPF>
      <EnableWindowsTargeting>true</EnableWindowsTargeting>
    </PropertyGroup>
    

    这里的windows10.0.19041.0是目标Windows版本,你可以根据需要调整为更高的版本(比如22000、22621等)。

  • 代码示例:监听陀螺仪数据
    下面是一个极简的控制台应用示例,用来实时获取陀螺仪的读数:

    using System;
    using Windows.Devices.Sensors;
    
    namespace SensorConsoleDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 获取陀螺仪硬件实例
                var gyroSensor = Gyrometer.GetDefault();
                if (gyroSensor == null)
                {
                    Console.WriteLine("设备未检测到陀螺仪传感器");
                    return;
                }
    
                // 设置数据报告间隔(取硬件支持的最小间隔和自定义间隔的最大值)
                gyroSensor.ReportInterval = Math.Max(gyroSensor.MinimumReportInterval, 100);
    
                // 订阅读数变化事件
                gyroSensor.ReadingChanged += OnGyroReadingChanged;
    
                Console.WriteLine("正在监听陀螺仪数据,按任意键退出...");
                Console.ReadKey();
            }
    
            private static void OnGyroReadingChanged(Gyrometer sender, GyrometerReadingChangedEventArgs args)
            {
                var reading = args.Reading;
                Console.WriteLine($"陀螺仪实时数据 - X轴角速度: {reading.AngularVelocityX:F2} rad/s | Y轴: {reading.AngularVelocityY:F2} rad/s | Z轴: {reading.AngularVelocityZ:F2} rad/s");
            }
        }
    }
    

    其他传感器(比如重力传感器GravitySensor)的用法几乎完全一致,只需要替换对应的类名,订阅它的ReadingChanged事件即可。

  • 额外注意事项

    • 传感器功能依赖硬件支持,运行前要确保设备上有对应的传感器硬件。
    • 如果你还在使用.NET Framework 4.x这类较老的框架,那可能需要通过Windows Runtime Component作为中间层来调用传感器API,或者尝试WMI的传感器相关类,但WMI支持的传感器类型有限,不如WinRT API全面,所以优先推荐升级到.NET 5+版本。

内容的提问来源于stack exchange,提问作者user8938436

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:15:39