修正遙控器SafeInvokeAction
This commit is contained in:
parent
5d2ea02263
commit
f07129c18f
@ -26,10 +26,9 @@ namespace DualScreenDemo
|
|||||||
/// 遙控器接收資料
|
/// 遙控器接收資料
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task ProcessData(string indata)
|
public async Task ProcessData(string indata)
|
||||||
{
|
{ AddToHistory(indata);
|
||||||
AddToHistory(indata);
|
|
||||||
// 遙控器測試
|
// 遙控器測試
|
||||||
Console.WriteLine("遙控器: " + indata);
|
// Console.WriteLine($"[{DateTime.Now:HH:mm:ss.fff}] 遙控器: {indata}");
|
||||||
switch (indata)
|
switch (indata)
|
||||||
{
|
{
|
||||||
case "A261A4": // 輸入
|
case "A261A4": // 輸入
|
||||||
@ -70,12 +69,12 @@ namespace DualScreenDemo
|
|||||||
// 原唱
|
// 原唱
|
||||||
case "A26CA4":
|
case "A26CA4":
|
||||||
Console.WriteLine("ToggleVocalRemoval Invoked");
|
Console.WriteLine("ToggleVocalRemoval Invoked");
|
||||||
InvokeAction(() => VideoPlayerForm.Instance.ToggleVocalRemoval());
|
SafeInvokeAction("A26CA4",() => VideoPlayerForm.Instance.ToggleVocalRemoval());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowOriginalSongLabel());
|
SafeInvokeAction("A26CA4",() => OverlayForm.MainForm.ShowOriginalSongLabel());
|
||||||
break;
|
break;
|
||||||
// 導唱
|
// 導唱
|
||||||
case "A26EA4":
|
case "A26EA4":
|
||||||
InvokeAction(() => VideoPlayerForm.Instance.ToggleVocalRemoval());
|
SafeInvokeAction("A26EA4",() => VideoPlayerForm.Instance.ToggleVocalRemoval());
|
||||||
break;
|
break;
|
||||||
case "A26DA4":
|
case "A26DA4":
|
||||||
PauseOrResumeSong();
|
PauseOrResumeSong();
|
||||||
@ -88,106 +87,131 @@ namespace DualScreenDemo
|
|||||||
HandleArtistAnnouncements();
|
HandleArtistAnnouncements();
|
||||||
break;
|
break;
|
||||||
case "A2B3A4":
|
case "A2B3A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A2B3A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowVolumeUpLabel());
|
SafeInvokeAction("A2B3A4",() => OverlayForm.MainForm.ShowVolumeUpLabel());
|
||||||
break;
|
break;
|
||||||
case "A2B4A4":
|
case "A2B4A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A2B4A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowVolumeDownLabel());
|
SafeInvokeAction("A2B4A4",() => OverlayForm.MainForm.ShowVolumeDownLabel());
|
||||||
break;
|
break;
|
||||||
case "A2B5A4":
|
case "A2B5A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A2B5A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowMicUpLabel());
|
SafeInvokeAction("A2B5A4",() => OverlayForm.MainForm.ShowMicUpLabel());
|
||||||
break;
|
break;
|
||||||
case "A2B6A4":
|
case "A2B6A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A2B6A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowMicDownLabel());
|
SafeInvokeAction("A2B6A4",() => OverlayForm.MainForm.ShowMicDownLabel());
|
||||||
break;
|
break;
|
||||||
case "A2C2A4":
|
case "A2C2A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HidemicLabels());
|
SafeInvokeAction("A2C2A4",() => OverlayForm.MainForm.HidemicLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowStandardLabel());
|
SafeInvokeAction("A2C2A4",() => OverlayForm.MainForm.ShowStandardLabel());
|
||||||
break;
|
break;
|
||||||
case "A2C3A4":
|
case "A2C3A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HidemicLabels());
|
SafeInvokeAction("A2C3A4",() => OverlayForm.MainForm.HidemicLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowProfessionalLabel());
|
SafeInvokeAction("A2C3A4",() => OverlayForm.MainForm.ShowProfessionalLabel());
|
||||||
break;
|
break;
|
||||||
case "A2C4A4":
|
case "A2C4A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HidemicLabels());
|
SafeInvokeAction("A2C4A4",() => OverlayForm.MainForm.HidemicLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowSquareLabel());
|
SafeInvokeAction("A2C4A4",() => OverlayForm.MainForm.ShowSquareLabel());
|
||||||
break;
|
break;
|
||||||
case "A2C1A4":
|
case "A2C1A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HidemicLabels());
|
SafeInvokeAction("A2C1A4",() => OverlayForm.MainForm.HidemicLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowSingDownLabel());
|
SafeInvokeAction("A2C1A4",() => OverlayForm.MainForm.ShowSingDownLabel());
|
||||||
break;
|
break;
|
||||||
case "A2D5A4":
|
case "A2D5A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A2D5A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowBrightLabel());
|
SafeInvokeAction("A2D5A4",() => OverlayForm.MainForm.ShowBrightLabel());
|
||||||
break;
|
break;
|
||||||
case "A2D7A4":
|
case "A2D7A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A2D7A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowRomanticLabel());
|
SafeInvokeAction("A2D7A4",() => OverlayForm.MainForm.ShowRomanticLabel());
|
||||||
break;
|
break;
|
||||||
/* case "A27CA4":
|
/* case "A27CA4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowMaleKeyLabel());
|
InvokeAction(() => OverlayForm.MainForm.ShowMaleKeyLabel());
|
||||||
break;
|
break;
|
||||||
case "A282A4":
|
case "A282A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowFemaleKeyLabel());
|
InvokeAction(() => OverlayForm.MainForm.ShowFemaleKeyLabel());
|
||||||
break;*/
|
break;*/
|
||||||
case "A2D6A4":
|
case "A2D6A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A2D6A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowSoftLabel());
|
SafeInvokeAction("A2D6A4",() => OverlayForm.MainForm.ShowSoftLabel());
|
||||||
break;
|
break;
|
||||||
case "A2D8A4":
|
case "A2D8A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A2D8A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowDynamicLabel());
|
SafeInvokeAction("A2D8A4",() => OverlayForm.MainForm.ShowDynamicLabel());
|
||||||
break;
|
break;
|
||||||
case "A275A4":
|
case "A275A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A275A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowTintLabel());
|
SafeInvokeAction("A275A4",() => OverlayForm.MainForm.ShowTintLabel());
|
||||||
break;
|
break;
|
||||||
case "A283A4":
|
case "A283A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A283A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowKeyUpLabel("↑升4調"));
|
SafeInvokeAction("A283A4",() => OverlayForm.MainForm.ShowKeyUpLabel("↑升4調"));
|
||||||
break;
|
break;
|
||||||
case "A282A4":
|
case "A282A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A282A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowKeyUpLabel("↑升3調"));
|
SafeInvokeAction("A282A4",() => OverlayForm.MainForm.ShowKeyUpLabel("↑升3調"));
|
||||||
break;
|
break;
|
||||||
case "A281A4":
|
case "A281A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A281A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowKeyUpLabel("↑升2調"));
|
SafeInvokeAction("A281A4",() => OverlayForm.MainForm.ShowKeyUpLabel("↑升2調"));
|
||||||
break;
|
break;
|
||||||
case "A280A4":
|
case "A280A4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A280A4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowKeyUpLabel("↑升1調"));
|
SafeInvokeAction("A280A4",() => OverlayForm.MainForm.ShowKeyUpLabel("↑升1調"));
|
||||||
break;
|
break;
|
||||||
case "A27FA4":
|
case "A27FA4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A27FA4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowStandardKeyLabel());
|
SafeInvokeAction("A27FA4",() => OverlayForm.MainForm.ShowStandardKeyLabel());
|
||||||
break;
|
break;
|
||||||
case "A27EA4":
|
case "A27EA4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A27EA4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowKeyDownLabel("↓降1調"));
|
SafeInvokeAction("A27EA4",() => OverlayForm.MainForm.ShowKeyDownLabel("↓降1調"));
|
||||||
break;
|
break;
|
||||||
case "A27DA4":
|
case "A27DA4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A27EA4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowKeyDownLabel("↓降2調"));
|
SafeInvokeAction("A27EA4",() => OverlayForm.MainForm.ShowKeyDownLabel("↓降2調"));
|
||||||
break;
|
break;
|
||||||
case "A27CA4":
|
case "A27CA4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A27CA4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowKeyDownLabel("↓降3調"));
|
SafeInvokeAction("A27CA4",() => OverlayForm.MainForm.ShowKeyDownLabel("↓降3調"));
|
||||||
break;
|
break;
|
||||||
case "A27BA4":
|
case "A27BA4":
|
||||||
InvokeAction(() => OverlayForm.MainForm.HideAllLabels());
|
SafeInvokeAction("A27BA4",() => OverlayForm.MainForm.HideAllLabels());
|
||||||
InvokeAction(() => OverlayForm.MainForm.ShowKeyDownLabel("↓降4調"));
|
SafeInvokeAction("A27BA4",() => OverlayForm.MainForm.ShowKeyDownLabel("↓降4調"));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (Regex.IsMatch(indata, @"^A23\d+A4$"))
|
if (Regex.IsMatch(indata, @"^A23\d+A4$"))
|
||||||
{
|
{
|
||||||
HandleNumberInput(indata);
|
HandleNumberInput(indata);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
private Dictionary<string, DateTime> _recentCommands = new();
|
||||||
|
private readonly TimeSpan _debounceInterval = TimeSpan.FromMilliseconds(300); // 最短觸發間隔
|
||||||
|
private void SafeInvokeAction(string commandKey, Action action)
|
||||||
|
{
|
||||||
|
/*var now = DateTime.Now;
|
||||||
|
|
||||||
|
if (_recentCommands.TryGetValue(commandKey, out DateTime lastTime))
|
||||||
|
{
|
||||||
|
if (now - lastTime < _debounceInterval)
|
||||||
|
return; // 忽略短時間內的重複指令
|
||||||
|
}
|
||||||
|
|
||||||
|
_recentCommands[commandKey] = now;
|
||||||
|
*/
|
||||||
|
// 真正執行 UI 操作
|
||||||
|
if (OverlayForm.MainForm.InvokeRequired)
|
||||||
|
{
|
||||||
|
OverlayForm.MainForm.BeginInvoke(action);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
action();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void AddToHistory(string indata)
|
private void AddToHistory(string indata)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user