相关疑难解决方法(0)

CLS(清除)单行?

有没有办法CLS输出一行?我不相信有任何开关CLS,所以可能更好的问题是:

有什么办法吗?

  1. 保留以前的所有输出以供重复使用?
    要么
  2. 捕获当前显示的输出(就像你可以通过标记和复制)?

我只是想通过提供实时反馈/信息来使我的脚本更加用户友好,而不是通过稍微改变的多行.但是,我能想到的唯一方法就是这样:

@echo off
goto Prep

:Prep
    SET count=5
    SET genericMessage=This window will close

    goto Output

:Output
    IF NOT %count% == -1 (
        cls
        IF %count% == 0 (
            echo %genericMessage% now.
        ) ELSE (
            echo %genericMessage% in %count% seconds.
        )
        SET /A count=%count% - 1
        ping localhost -n 2 >nul
        goto Output
    ) ELSE (
        exit
    )
Run Code Online (Sandbox Code Playgroud)

所以,你得到这个:

在此输入图像描述

但问题是,当我只想通过擦除并重新输出它来刷新一行时,CLS擦除所有输出.

有人有主意吗?

console cmd batch-file

8
推荐指数
2
解决办法
2万
查看次数

我可以保存控制台窗口的缓冲区或内容以备将来使用吗?

我正在玩控制台应用程序,只是想知道.保存控制台窗口的当前缓冲区以供以后使用的最佳方法是什么,并提供一种历史导航功能.我知道Diagnostics命名空间提供了读取标准输出的能力,但只有当你重定向它时,所以基本上你必须在一个看起来有点愚蠢的新窗口中运行处理所有结果.

c# console winapi input

6
推荐指数
1
解决办法
3126
查看次数

始终将Console.ReadLine保留在最后一行

我有一个用C#编写的应用程序,它通过while(true)循环和Console.ReadLine连续获取用户的命令.

我也有各种后台操作,通过控制台报告.查看这个简单的例子:

class Program
{  
        static void Main(string[] args)
        {
            new Messager(1000 * 2.5f);
            new Messager(1000 * 3);
            while (true)
            {
                Console.ReadLine();
            }
        }
}

public class Messager
{
    Timer Timer;

    public Messager(double interval)
    {
        this.Timer = new Timer(interval);
        this.Timer.Elapsed += (sender, e) =>
        {
            Console.WriteLine("message from " + this.Timer.Interval);
        };
        this.Timer.Start();
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我输入一个命令并且在按下Enter之前Messager报告回来时,来自Messager的消息将被附加到我当前的行,光标将被放入下一行.看这个截图:

问题

正如你猜我不想那样.我希望当前输入的命令始终保持在最后一行,并将所有消息放在该行之上.正如您对此类应用程序的期望一样.我如何实现这一目标?

c# console multithreading

2
推荐指数
1
解决办法
3997
查看次数

标签 统计

console ×3

c# ×2

batch-file ×1

cmd ×1

input ×1

multithreading ×1

winapi ×1