我想看到仅在控制台应用中更新的数字,以下是我尝试实现此目的的方法:
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()
不是一个好选择,因为文本会闪烁太快。我只想看到这些数字更新。
答案 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.CursorLeft
和Console.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);