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

C#控制台应用如何在运行时通过控制台交互读取变量值(如处理速度)

实现方案

你可以通过C#控制台的非阻塞按键检测功能实现需求,不需要打断正常的业务处理流程,也不需要中途暂停Stopwatch影响计时准确性,修改后的完整代码如下:

static void Main(string[] args)
{
    var sw = new Stopwatch();
    var worker = new Worker();
    var start = DateTime.Now;
    Console.WriteLine($"Initialisation started at {start}");
    sw.Start();
    var materials = worker.GatherMaterials();
    var workStart = DateTime.Now;
    Console.WriteLine($"Work started at {workStart}.");
    // 新增常驻操作提示
    Console.WriteLine("提示:按下S键可随时查看当前处理速度");
    var products = new List<Product>();
    foreach (var material in materials)
    {
        try
        {
            // 非阻塞检测按键输入,不会打断处理流程
            if (Console.KeyAvailable)
            {
                var keyInfo = Console.ReadKey(intercept: true);
                if (keyInfo.Key == ConsoleKey.S)
                {
                    double currentSpeed = (double)products.Count / sw.Elapsed.TotalSeconds;
                    Console.WriteLine($"[实时统计] 已处理{products.Count}个产品,当前平均速度:{currentSpeed:F2} 个/秒");
                }
            }

            var product = worker.Process(material);
            products.Add(product);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            break;
        }
    }
    sw.Stop();
    Console.WriteLine();
    var finish = DateTime.Now;
    Console.WriteLine($"Work finished at {finish}");
    Console.WriteLine($"Ran from {start} to {finish} for approximately {sw.Elapsed} ms.");
    var finalSpeed = (double)products.Count / sw.Elapsed.TotalSeconds;
    Console.WriteLine($"Processed {products.Count} products for an average processing speed of {finalSpeed:F2} products/s.");
    var jsonOptions = new JsonSerializerOptions()
    {
        Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
        WriteIndented = true
    };
    var json = JsonSerializer.Serialize(products, jsonOptions);
    File.WriteAllText("products.json", json, Encoding.UTF8);
    Console.WriteLine("Saved all products to products.json");
}

核心改动说明

  • 移除了原代码中Stopwatch的中途暂停、重启逻辑,全程保持运行,计时精度更高
  • 新增非阻塞按键检测逻辑:通过Console.KeyAvailable检测是否有按键输入,不会阻塞正常的物料处理流程
  • 兼容大小写S键触发统计查询,设置Console.ReadKey(intercept: true)可避免按键输入回显到控制台,不会打乱正常的日志输出
  • 处理速度在触发查询时实时计算,无需额外缓存变量,数据准确性更高

如果单个物料处理耗时较长,想要按键响应更实时,可以单独开一个后台线程监听按键,和主线程的处理逻辑完全隔离,不会互相影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 19:54:01