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

制作可实时显示C#程序按键数据的简易ASP网页

解决方案:用.NET最小API + SignalR实现实时同步

因为你不想用MVC框架,还要用最少文件实现需求,.NET最小API + SignalR是最适配的方案——无需复杂结构,几个文件就能完成无刷新的实时数据同步。

步骤1:创建基础项目

打开命令提示符,执行以下命令创建一个轻量Web项目:

dotnet new web -n KeyBoardMonitor
cd KeyBoardMonitor

步骤2:添加SignalR依赖

执行命令引入SignalR实时通信包:

dotnet add package Microsoft.AspNetCore.SignalR

步骤3:处理SDK DLL

把WootingAnalogSDKNET.dll复制到项目根目录,确保编译后该文件会被复制到输出目录(如果用Visual Studio,右键文件设置「复制到输出目录」为「如果较新则复制」;命令行环境直接手动复制到bin/Debug/net6.0或对应版本目录)。

步骤4:修改Program.cs

替换项目中Program.cs的全部内容,整合你的键盘读取逻辑和SignalR通信:

using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
using WootingAnalogSDKNET;
using System.Threading;
using System.Linq;

var builder = WebApplication.CreateBuilder(args);

// 注册SignalR服务
builder.Services.AddSignalR();

var app = builder.Build();

// 启用静态文件访问(用于加载HTML页面)
app.UseStaticFiles();

// 定义SignalR集线器,负责和客户端通信
public class KeyHub : Hub
{
}

// 映射SignalR路由
app.MapHub<KeyHub>("/keyHub");

// 后台启动键盘读取任务,避免阻塞Web主线程
Task.Run(async () =>
{
    Console.WriteLine("Hello Analog SDK!");

    var (noDevices, error) = WootingAnalogSDK.Initialise();
    if (noDevices >= 0)
    {
        Console.WriteLine($"Analog SDK Successfully initialised with {noDevices} devices!");
    }
    else
    {
        Console.WriteLine($"Analog SDK failed to initialise: {error}");
        return;
    }

    // 获取SignalR上下文,用于向所有客户端推送数据
    var hubContext = app.Services.GetRequiredService<IHubContext<KeyHub>>();

    while (true)
    {
        var (keys, readErr) = WootingAnalogSDK.ReadFullBuffer(20);
        if (readErr == WootingAnalogResult.Ok && keys.Count > 0)
        {
            // 格式化按键数据为字符串
            var keyData = string.Join(" ", keys.Select(k => $"({k.Item1},{k.Item2})"));
            // 推送数据给所有连接的客户端
            await hubContext.Clients.All.SendAsync("ReceiveKeyData", keyData);
        }
        else if (readErr != WootingAnalogResult.Ok)
        {
            Console.WriteLine($"Read failed with {readErr}");
            Thread.Sleep(1000);
        }
        Thread.Sleep(100);
    }
});

app.Run();

步骤5:创建HTML页面

在项目根目录新建wwwroot文件夹(如果不存在),然后在其中创建index.html:

<!DOCTYPE html>
<html>
<head>
    <title>实时键盘数据</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/7.0.10/signalr.min.js"></script>
</head>
<body>
    <h1>实时键盘数据</h1>
    <div id="keyDataDisplay" style="font-size:18px; margin-top:20px;"></div>

    <script>
        // 建立SignalR连接
        const connection = new signalR.HubConnectionBuilder()
            .withUrl("/keyHub")
            .build();

        // 接收服务器推送的键盘数据,更新页面内容
        connection.on("ReceiveKeyData", function (data) {
            document.getElementById("keyDataDisplay").textContent = data;
        });

        // 启动连接,处理异常
        connection.start().catch(function (err) {
            return console.error(err.toString());
        });
    </script>
</body>
</html>

步骤6:运行项目

在命令提示符执行:

dotnet run

打开浏览器访问控制台输出的地址(通常是http://localhost:5000或https://localhost:5001),就能看到键盘数据实时更新,无需刷新页面。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:15:32