【问题标题】:Why does my system beep when writing to Console为什么我的系统在写入控制台时会发出哔哔声
【发布时间】:2012-07-16 00:54:48
【问题描述】:

我正在为我在我的应用程序中使用的 Web 服务编写控制台测试器。当我将输出写入控制台(JSON)以获得足够大的设置时,控制台应用程序会旋转,并且我开始发出 5-10 秒的哔哔声。我检查了一个 \a 的输出但找不到一个,所以我不确定是什么导致了哔哔声。

此时我只是在猜测长输出,但我不确定还有什么问题或是否有任何解决方案。

【问题讨论】:

  • 有一个类似的问题,如果输出的大小超过控制台上的行缓冲区,它会向我发出哔哔声。您是否尝试过调整垂直缓冲区大小?
  • @lukiffer 我会将 BufferHeight 设置为什么?
  • 取决于输出的大小。有足够的垂直线来显示输出...我最终不得不将数据分块并放入单独的 Console.Write() 调用中。
  • 这对我来说可能是最好的选择,因为数据的长度变化很大,可能在数万行范围内......
  • @lukiffer 我要打印的字符串之一是 245345 个字符长。拆分成单独的写入调用的安全字符数是多少?

标签: c# console


【解决方案1】:

即使您检查 BELL 字符的输入,它仍可能会发出蜂鸣声。这是由于字体设置和 unicode 转换造成的。有问题的角色是U+2022,Bullet。

陈瑞峰explains:

在 OEM 代码页中,项目符号字符被转换为 嘟。但这是为什么呢?

您看到的是相反的 MB_USEGLYPHCHARS。迈克尔·卡普兰 前段时间讨论了 MB_USEGLYPHCHARS。它决定了是否确定 字符应被视为控制字符或可打印 转换为 Unicode 时的字符。例如,它控制 ASCII 响铃字符 0x07 是否应转换为 Unicode 钟形字符 U+0007 或 Unicode 项目符号 U+2022。你 需要 MB_USEGLYPHCHARS 标志来决定何时走哪条路 转换为 Unicode,但没有相应的歧义 从Unicode转换。从 Unicode 转换时,U+0007 和 U+2022 映射到 ASCII 响铃字符。

【讨论】:

    【解决方案2】:

    我在尝试写入事件日志时看到了类似的情况,但它已满。

    尝试Start > Run... > eventvwr,然后清除一些日志或更改日志的最大大小(通过“操作”菜单)。

    【讨论】:

      【解决方案3】:

      可能是 BEL?

      ctl-G

      7

      7

      比利时

      需要引起注意时使用的控制字符;它可以控制警报或注意设备。

      【讨论】:

      • 他说控制台输出中没有\a的迹象。 \aBEL 的转义序列。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      相关资源
      最近更新 更多