更新循环中的某些文本值

时间:2018-06-06 10:57:37

标签: c# console-application

我想看到仅在控制台应用中更新的数字,以下是我尝试实现此目的的方法:

int successEntryCount = 0;
int failedEntryCount = 0;

Console.WriteLine("App Started:");

foreach (var entity in entities)
{
    var res = bll.AsiErtelemeIptalPaketiGonder(entity);
    if (res.State == Framework.Entities.MessageResultState.SUCCESS)
        successEntryCount++;
    else
        failedEntryCount++;

    Console.WriteLine("success :{0}", successEntryCount);
    Console.WriteLine("fail:{0}", failedEntryCount);
}

当然它会复制该行,而Console.Clear()不是一个好选择,因为文本会闪烁太快。我只想看到这些数字更新。

3 个答案:

答案 0 :(得分:3)

使用Console.SetCursorPosition方法。我们来看看这个简单的例子:

int successEntryCount = 0,
    failedEntryCount = 10,
    l = Console.CursorLeft,
    t = Console.CursorTop;

for (int i = 0; i < 2000; i++)
{
    Thread.Sleep(100);
    Console.SetCursorPosition(l, t);

    Console.WriteLine("success :{0}", successEntryCount++);
    Console.WriteLine("fail:{0}", failedEntryCount++);
    //or
    //Console.Write("success :{0} fail:{1}", successEntryCount++ , failedEntryCount++);
}

它将更新/打印值而不会闪烁。

有更多选项(如果你觉得它们对你更有吸引力)来实现同样的目的,例如:

Console.Write("\rsuccess :{0} fail:{1}", successEntryCount++, failedEntryCount++); //Carriage return

\r表示回车符(字符13),表示光标返回到行的开头。

Console.Write("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bsuccess :{0} fail:{1}", successEntryCount++ , failedEntryCount++); //Using backspaces

\b是退格字符(字符8)。

参考文献: MSDN Escape Sequences

答案 1 :(得分:1)

您可以使用Console.SetCursorPosition设置光标位置。另外,不要松开现有的控制台日志(已记录为 - App Started:在您的情况下),您可以根据检索到的左侧和顶部位置设置光标位置。可以使用Console.CursorLeftConsole.CursorTop属性检索当前的左右位置。

int successEntryCount = 0;
int failedEntryCount = 0;

Console.WriteLine("App Started:");

int left = Console.CursorLeft;
int right = Console.CursorTop;

foreach (var entity in entities)
{
    var res = bll.AsiErtelemeIptalPaketiGonder(entity);
    if (res.State == Framework.Entities.MessageResultState.SUCCESS)
        successEntryCount++;
    else
        failedEntryCount++;

    Console.SetCursorPosition(left, right);
    Console.WriteLine("success :{0}", successEntryCount);
    Console.WriteLine("fail:{0}", failedEntryCount);
}

答案 2 :(得分:0)

而不是

Console.WriteLine("success :{0}", successEntryCount);
Console.WriteLine("fail:{0}", failedEntryCount);

你可能会尝试像

这样的东西
Console.Write("success :{0} fail:{1}            \r", successEntryCount, failedEntryCount);