2013-04-10 129 views
0

我有一个程序可以显示剩余的估计时间,但也可以打印其他内容。我想打印其他部分而不影响定时器的位置。控制台输出格式

这里是我的样本输出:

Processing the files into smaller chunks ... 

90% 00:00:01 left. 

Finished processing files 
Now Comparing ... 

AffiliatePairoffSnapshot 
10% 00:00:08 left. 
     Total:    0 

AllocationSnapshot 
23% 00:00:07 left. 
.trans.links[0].type.TransLinkType             102 

.trans.links[0].fromTransactionRef.versionHandle.instanceHandle.id     102 

     Total:    204 

TradeSnapshot 

     Total:    0 

TransferSnapshot 
86% 00:00:01 left. 
.trans.links[0].size.amount               5 

.trans.links[0].fromTransactionRef.versionHandle.instanceHandle.id     5 

.trans.activityContextRef[0].versionHandle.instanceHandle.id      3708 

     Total:   3718 

     Total Number Different Fields Across All ObjectTypes:   3922 

The Generated xml files can be found at: c:\Users\grover\packer\XML

我想打印在上留下自己的路线的时候并没有影响到其他印刷品是有办法做到这一点?

回答

0

让代码打印时间请执行以下操作:

  1. 将当前光标位置存储在变量中。
  2. 将光标移动到下一行。
  3. 每次要更新文本时:
    1. 将当前光标位置存储在另一个变量中。
    2. 将光标设置到第一步中光标所在的那一行。
    3. 写一些文字。
    4. 将当前光标位置设置为步骤3.1中存储的值。

这里的概念的一个简单的演示:

private static void Main() 
{ 
    PrintTimes(); 

    for (int i = 0; i < 10; i++) 
    { 
     Console.WriteLine("Some text is being printed"); 
     Thread.Sleep(1000); 
    } 

    Console.WriteLine(); 
    Console.WriteLine("press any key to exit . . ."); 
    Console.ReadKey(); 
} 

private static async void PrintTimes() 
{ 
    int line = Console.CursorTop; 
    Console.WriteLine(); 
    for (int i = 0; i < 10; i++) 
    { 
     int previousLine = Console.CursorTop; 
     int previousChar = Console.CursorLeft; 
     Console.CursorTop = line; 
     Console.CursorLeft = 0; 
     Console.WriteLine("{0}% left  ", 100 - i * 10); 
     Console.CursorTop = previousLine; 
     Console.CursorLeft = previousChar; 

     await Task.Delay(1000); 
    } 
} 

注意,在这个演示中PrintTimes完成的字不是原子,所以它仍有可能在被注入另一台写这些行动之间。如果您最终频繁地写入控制台,则需要确保同步所有控制台写入。