优化控制台输入模式的设置逻辑,调整输入模式恢复时机

This commit is contained in:
muqing 2025-01-12 17:26:16 +08:00
parent f2719bb41d
commit b855a18a43
2 changed files with 27 additions and 24 deletions

View File

@ -38,30 +38,17 @@ public class MusicFrom
public MusicFrom() public MusicFrom()
{ {
// 获取标准输入句柄
IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE);
// 获取当前控制台输入模式
uint mode;
if (!GetConsoleMode(hStdin, out mode))
{
Console.WriteLine("无法获取控制台输入模式");
return;
}
// 禁用回显和行输入
mode &= ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT);
if (!SetConsoleMode(hStdin, mode))
{
Console.WriteLine("无法设置控制台输入模式");
return;
}
setCharArry(); setCharArry();
MaxY = Program.chars.GetLength(0); MaxY = Program.chars.GetLength(0);
MaxX = Program.chars.GetLength(1); MaxX = Program.chars.GetLength(1);
new Thread(PrintCharArray).Start(); new Thread(PrintCharArray).Start();
new Thread(KeyboardMapping).Start(); new Thread(KeyboardMapping).Start();
new Thread(Run).Start(); new Thread(Run).Start();
// 恢复控制台输入模式
// mode |= ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT;
// SetConsoleMode(hStdin, mode);
} }
public void Run() public void Run()
@ -127,6 +114,24 @@ public class MusicFrom
public void PrintCharArray() public void PrintCharArray()
{ {
// 获取标准输入句柄
IntPtr hStdin = GetStdHandle(STD_INPUT_HANDLE);
// 获取当前控制台输入模式
uint mode;
if (!GetConsoleMode(hStdin, out mode))
{
Console.WriteLine("无法获取控制台输入模式");
return;
}
// 禁用回显和行输入
mode &= ~(ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT);
if (!SetConsoleMode(hStdin, mode))
{
Console.WriteLine("无法设置控制台输入模式");
return;
}
var stopwatch = new Stopwatch(); var stopwatch = new Stopwatch();
int frameCount = 0; int frameCount = 0;
double totalTime = 0; double totalTime = 0;
@ -135,7 +140,6 @@ public class MusicFrom
var a = Program.chars.GetLength(0); var a = Program.chars.GetLength(0);
var b = Program.chars.GetLength(1); var b = Program.chars.GetLength(1);
var buffer = new StringBuilder(); var buffer = new StringBuilder();
ConsoleColor xiantiaoColor = Program.random.Next(0, 2) == 0 ? ConsoleColor.Red : ConsoleColor.Blue;//线条的颜色
while (Program.IsWhile) while (Program.IsWhile)
{ {
stopwatch.Restart(); stopwatch.Restart();
@ -146,9 +150,6 @@ public class MusicFrom
{ {
for (j = 0; j < b; j++) for (j = 0; j < b; j++)
{ {
//Console.ForegroundColor = Program.chars[i, j].Color;
//Console.Write($" {Program.chars[i, j].Char} ");
buffer.Append(Program.chars[i, j].Char); buffer.Append(Program.chars[i, j].Char);
time++; time++;
if (time > 100000) if (time > 100000)
@ -225,6 +226,9 @@ public class MusicFrom
//这样闪烁不会太严重 //这样闪烁不会太严重
Thread.Sleep(50); Thread.Sleep(50);
} }
// 恢复控制台输入模式
mode |= ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT;
SetConsoleMode(hStdin, mode);
} }
private void setCharArry() private void setCharArry()
{ {

View File

@ -1,5 +1,4 @@
using System.Runtime.InteropServices; using System.Text;
using System.Text;
using Debug.ModelingMusic; using Debug.ModelingMusic;
namespace Debug; namespace Debug;
/// <summary> /// <summary>