diff --git a/CommandHandler.cs b/CommandHandler.cs index 63ab20f..3064568 100644 --- a/CommandHandler.cs +++ b/CommandHandler.cs @@ -16,32 +16,19 @@ namespace DualScreenDemo { this.songListManager = songListManager; } - + /// + /// 遙控器接收資料 + /// public async Task ProcessData(string indata) - { //關機錨點 - /*string filePath = Path.Combine(Application.StartupPath, "dataLog.txt"); - // 使用 Path.Combine 方法安全地將應用程式的啟動路徑與 "dataLog.txt" 檔案名結合, - // 建立完整的檔案路徑。Application.StartupPath 通常指向應用程式的可執行檔所在的目錄。 - - if (CheckLogForShutdown(filePath)) - // 呼叫 CheckLogForShutdown 方法,並將建立的檔案路徑 (filePath) 作為參數傳遞。 - // 這個方法預期會檢查指定的日誌檔案內容,以判斷是否符合關機的條件。 - // 如果該方法回傳 true (表示符合關機條件),則執行 if 區塊內的程式碼。 - { - Console.WriteLine("Shutdown condition met. Application will now close."); - // 在控制台輸出訊息,告知使用者已滿足關機條件,應用程式即將關閉。 - ShutdownComputer(); - // 呼叫 ShutdownComputer 方法,這個方法預期會執行關閉電腦的操作。 - }*/ - + { AddToHistory(indata); switch (indata) { - case "A261A4": + case "A261A4": // 輸入 HandleInputA(); break; - case "A262A4": + case "A262A4": // 插播 HandleInputB(); break; case "A263A4": @@ -442,97 +429,79 @@ namespace DualScreenDemo } } + /// + /// 清除 OverlayForm 上除特定保留控制項外的所有控制項,並重設顯示狀態 + /// private static void ClearDisplay() { - + // 停止顯示用的計時器 OverlayForm.displayTimer.Stop(); - - + + // 判斷是否需要透過 Invoke 回 UI 執行緒執行 if (OverlayForm.MainForm.InvokeRequired) { - OverlayForm.MainForm.Invoke(new System.Action(() => - { - - foreach (var control in OverlayForm.MainForm.Controls.OfType().ToArray()) - { - if (control != OverlayForm.MainForm.displayLabel && - control != OverlayForm.MainForm.pauseLabel && - control != OverlayForm.MainForm.muteLabel && - control != OverlayForm.MainForm.volumeUpLabel && - control != OverlayForm.MainForm.volumeDownLabel && - control != OverlayForm.MainForm.micUpLabel && - control != OverlayForm.MainForm.micDownLabel && - control != OverlayForm.MainForm.standardKeyLabel && - control != OverlayForm.MainForm.keyUpLabel && - control != OverlayForm.MainForm.keyDownLabel && - control != OverlayForm.MainForm.maleKeyLabel && - control != OverlayForm.MainForm.femaleKeyLabel && - control != OverlayForm.MainForm.squareLabel && - control != OverlayForm.MainForm.professionalLabel && - control != OverlayForm.MainForm.standardLabel && - control != OverlayForm.MainForm.singDownLabel && - control != OverlayForm.MainForm.brightLabel && - control != OverlayForm.MainForm.softLabel && - control != OverlayForm.MainForm.autoLabel && - control != OverlayForm.MainForm.romanticLabel && - control != OverlayForm.MainForm.dynamicLabel && - control != OverlayForm.MainForm.tintLabel && - control != OverlayForm.MainForm.blackBackgroundPanel && - control != OverlayForm.MainForm.nextSongLabel) - { - OverlayForm.MainForm.Controls.Remove(control); - control.Dispose(); - } - } - - OverlayForm.MainForm.displayLabel.Text = ""; - readyForSongListInput = false; - OverlayForm.SetUIState(OverlayForm.UIState.Initial); - Console.WriteLine(OverlayForm.MainForm.displayLabel.Text); - })); + OverlayForm.MainForm.Invoke(new Action(ClearControlsAndReset)); } else { - - foreach (var control in OverlayForm.MainForm.Controls.OfType().ToArray()) - { - if (control != OverlayForm.MainForm.displayLabel && - control != OverlayForm.MainForm.pauseLabel && - control != OverlayForm.MainForm.muteLabel && - control != OverlayForm.MainForm.volumeUpLabel && - control != OverlayForm.MainForm.volumeDownLabel && - control != OverlayForm.MainForm.micUpLabel && - control != OverlayForm.MainForm.micDownLabel && - control != OverlayForm.MainForm.standardKeyLabel && - control != OverlayForm.MainForm.keyUpLabel && - control != OverlayForm.MainForm.keyDownLabel && - control != OverlayForm.MainForm.maleKeyLabel && - control != OverlayForm.MainForm.femaleKeyLabel && - control != OverlayForm.MainForm.squareLabel && - control != OverlayForm.MainForm.professionalLabel && - control != OverlayForm.MainForm.standardLabel && - control != OverlayForm.MainForm.singDownLabel && - control != OverlayForm.MainForm.brightLabel && - control != OverlayForm.MainForm.softLabel && - control != OverlayForm.MainForm.autoLabel && - control != OverlayForm.MainForm.romanticLabel && - control != OverlayForm.MainForm.dynamicLabel && - control != OverlayForm.MainForm.tintLabel && - control != OverlayForm.MainForm.blackBackgroundPanel && - control != OverlayForm.MainForm.nextSongLabel) - { - OverlayForm.MainForm.Controls.Remove(control); - control.Dispose(); - } - } - - OverlayForm.MainForm.displayLabel.Text = ""; - Console.WriteLine("ClearDisplay called."); - readyForSongListInput = false; - OverlayForm.SetUIState(OverlayForm.UIState.Initial); - Console.WriteLine(OverlayForm.MainForm.displayLabel.Text); + ClearControlsAndReset(); } } + + /// + /// 實際執行移除不需要的控制項並重設 UI 狀態 + /// + private static void ClearControlsAndReset() + { + // 保留不刪除的控制項列表 + var preservedControls = new HashSet + { + OverlayForm.MainForm.displayLabel, + OverlayForm.MainForm.pauseLabel, + OverlayForm.MainForm.muteLabel, + OverlayForm.MainForm.volumeUpLabel, + OverlayForm.MainForm.volumeDownLabel, + OverlayForm.MainForm.micUpLabel, + OverlayForm.MainForm.micDownLabel, + OverlayForm.MainForm.standardKeyLabel, + OverlayForm.MainForm.keyUpLabel, + OverlayForm.MainForm.keyDownLabel, + OverlayForm.MainForm.maleKeyLabel, + OverlayForm.MainForm.femaleKeyLabel, + OverlayForm.MainForm.squareLabel, + OverlayForm.MainForm.professionalLabel, + OverlayForm.MainForm.standardLabel, + OverlayForm.MainForm.singDownLabel, + OverlayForm.MainForm.brightLabel, + OverlayForm.MainForm.softLabel, + OverlayForm.MainForm.autoLabel, + OverlayForm.MainForm.romanticLabel, + OverlayForm.MainForm.dynamicLabel, + OverlayForm.MainForm.tintLabel, + OverlayForm.MainForm.blackBackgroundPanel, + OverlayForm.MainForm.nextSongLabel + }; + + // 將所有不在保留清單內的控制項移除並釋放資源 + foreach (var control in OverlayForm.MainForm.Controls.OfType().ToArray()) + { + if (!preservedControls.Contains(control)) + { + OverlayForm.MainForm.Controls.Remove(control); + control.Dispose(); + } + } + + // 清空主顯示區的文字 + OverlayForm.MainForm.displayLabel.Text = ""; + Console.WriteLine("ClearDisplay called."); + + // 重設狀態標記與 UI 狀態 + readyForSongListInput = false; + OverlayForm.SetUIState(OverlayForm.UIState.Initial); + Console.WriteLine("Display cleared."); + } + private static void DisplaySongHistory() { ClearDisplay();