在第三行更新文字
程式碼如下
using Microsoft.Win32.SafeHandles; using System; using System.Runtime.InteropServices; using System.Threading; class Program { [DllImport("kernel32.dll")] static extern SafeFileHandle GetStdHandle(int nStdHandle); [DllImport("kernel32.dll")] static extern bool GetConsoleMode(SafeFileHandle hConsoleHandle, out uint lpMode); [DllImport("kernel32.dll")] static extern bool SetConsoleMode(SafeFileHandle hConsoleHandle, uint dwMode); const int STD_INPUT_HANDLE = -10; // 標準輸入裝置(鍵盤) // 常量定義 const uint ENABLE_QUICK_EDIT_MODE = 0x0040; // 快速編輯模式標識位 static void DisableQuickEditMode() { var stdin = GetStdHandle(STD_INPUT_HANDLE); uint consoleMode; if (!GetConsoleMode(stdin, out consoleMode)) { throw new System.IO.IOException("Failed to get console mode."); } // 清除快速編輯模式標誌 consoleMode &= ~ENABLE_QUICK_EDIT_MODE; // 設定新的控制檯模式 if (!SetConsoleMode(stdin, consoleMode)) { throw new System.IO.IOException("Failed to set console mode."); } } static bool IsEnd = false; static void Main() { // 安裝Ctrl+C事件處理器 Console.CancelKeyPress += Console_CancelKeyPress; DisableQuickEditMode();//快速編輯模式已禁用,點選滑鼠將不會暫停程式 string[] progressStatuses = { "載入中...", "正在處理資料...", "即將完成..." }; int index = 0; int targetLine = 2; // 假設我們想在第三行(索引從0開始)更新文字 while (true) { // 獲取當前視窗寬度以覆蓋整行 int windowWidth = Console.WindowWidth; // 移動游標到目標行行首 Console.SetCursorPosition(0, targetLine); // 寫入足夠的空格來清除當前行內容 Console.Write(new string(' ', windowWidth-1)); // 移動游標到當前行首 Console.SetCursorPosition(0, Console.CursorTop); // 覆蓋現有內容,顯示新的狀態資訊 Console.Write(progressStatuses[index]); // 更改狀態(模擬進度) index = (index + 1) % progressStatuses.Length; // 暫停一段時間以觀察效果 Thread.Sleep(1000); if (IsEnd) break; } Console.WriteLine("\n終止程式"); Console.WriteLine("請按任意鍵結束"); Console.ReadKey(); } private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e) { IsEnd = true; // 如果你希望阻止程式退出,取消預設行為 e.Cancel = true; // 設定為true則阻止程式終止 //// 最後可以選擇手動退出程式 //Environment.Exit(0); } }