WinForm程序啟動控制台窗口Console


本文轉載:http://blog.csdn.net/oyi319/article/details/5753311

2.WinForm程序和控制台窗口Console

如果你調試過SharpDevelop的源程序,會發現它在DEBUG模式時會出現一個控制台窗口,以顯示日志信息。或許我使用的方法與其不同,不過你可以試一試,寫出我們自己的調試日志代碼。

 

首先要解決的問題是如何在Debug模式時顯示Console窗口。我確定,這是一個WinForm項目,也沒有改過它的輸出類型。我們需要在項目的入口點使用一些API函數將控制台顯示出來:

它們是 AllocConsole 和 FreeConsole。

 

[c-sharp]  view plain copy
 
  1. [DllImport("kernel32.dll")]  
  2. public static extern Boolean AllocConsole();  
  3. [DllImport("kernel32.dll")]  
  4. public static extern Boolean FreeConsole();  

 

然后我們使它在Main()開始處判斷DEBUG編譯標記,調用AllocConsole方法顯示控制台,然后在Main()的結束處判斷DEBUG編譯標記,調用FreeConsole方法關閉控制台。這樣,我們就可以使用Console.Write等方法將調試信息顯示在這個控制台窗口里。

 

為了達到更好的效果,我們寫一個Shell類,用它來封裝Console.WriteLine方法,輸出個性化信息。我是這樣做的,根據輸出到控制台的文本的前幾個字判斷為“警告”、“錯誤”、“注意”時,輸出帶有黃色、紅色、綠色的文字,其他輸出信息輸出控制台缺省的灰色文字,以起到區分效果,還要在每條信息前加上輸出信息的當時時間。

 

這個Shell類是這樣的:

 

[c-sharp]  view plain copy
 
  1. /// <summary>  
  2. /// 與控制台交互  
  3. /// </summary>  
  4. static class Shell  
  5. {  
  6.     /// <summary>  
  7.     /// 輸出信息  
  8.     /// </summary>  
  9.     /// <param name="format"></param>  
  10.     /// <param name="args"></param>  
  11.     public static void WriteLine(string format, params object[] args)  
  12.     {  
  13.         WriteLine(string.Format(format, args));  
  14.     }  
  15.   
  16.     /// <summary>  
  17.     /// 輸出信息  
  18.     /// </summary>  
  19.     /// <param name="output"></param>  
  20.     public static void WriteLine(string output)  
  21.     {  
  22.         Console.ForegroundColor = GetConsoleColor(output);  
  23.         Console.WriteLine(@"[{0}]{1}", DateTimeOffset.Now, output);  
  24.     }  
  25.   
  26.     /// <summary>  
  27.     /// 根據輸出文本選擇控制台文字顏色  
  28.     /// </summary>  
  29.     /// <param name="output"></param>  
  30.     /// <returns></returns>  
  31.     private static ConsoleColor GetConsoleColor(string output)  
  32.     {  
  33.         if (output.StartsWith("警告")) return ConsoleColor.Yellow;  
  34.         if (output.StartsWith("錯誤")) return ConsoleColor.Red;  
  35.         if (output.StartsWith("注意")) return ConsoleColor.Green;  
  36.         return ConsoleColor.Gray;  
  37.     }  
  38. }  

 

 

那么程序入口函數Main代碼如下:

 

[c-sharp]  view plain copy
 
  1. /// <summary>  
  2. /// 應用程序的主入口點。  
  3. /// </summary>  
  4. [STAThread]  
  5. static void Main()  
  6. {  
  7. #if DEBUG  
  8.     AllocConsole();  
  9.     Shell.WriteLine("注意:啟動程序...");  
  10.   
  11.     Shell.WriteLine("/tWritten by Oyi319");  
  12.     Shell.WriteLine("/tBlog: http://blog.csdn.com/oyi319");  
  13.     Shell.WriteLine("{0}:{1}", "警告", "這是一條警告信息。");  
  14.     Shell.WriteLine("{0}:{1}", "錯誤", "這是一條錯誤信息!");  
  15.     Shell.WriteLine("{0}:{1}", "注意", "這是一條需要的注意信息。");  
  16.     Shell.WriteLine("");  
  17. #endif  
  18.     Application.EnableVisualStyles();  
  19.     Application.SetCompatibleTextRenderingDefault(false);  
  20.     Application.Run(new Form1());  
  21. #if DEBUG  
  22.     Shell.WriteLine("注意:2秒后關閉...");  
  23.     Thread.Sleep(2000);  
  24.     FreeConsole();  
  25. #endif  
  26. }  

 

 

現在這個控制台窗口,只會在DEBUG模式時顯示,而在Release編譯時不會出現。 這是不是你想要的調試方法呢?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM