2013-04-10 175 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完成的字不是原子,所以它仍有可能在被注入另一臺寫這些行動之間。如果您最終頻繁地寫入控制檯,則需要確保同步所有控制檯寫入。