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

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()
{
// 获取标准输入句柄
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();
MaxY = Program.chars.GetLength(0);
MaxX = Program.chars.GetLength(1);
new Thread(PrintCharArray).Start();
new Thread(KeyboardMapping).Start();
new Thread(Run).Start();
// 恢复控制台输入模式
// mode |= ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT;
// SetConsoleMode(hStdin, mode);
}
public void Run()
@ -127,6 +114,24 @@ public class MusicFrom
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();
int frameCount = 0;
double totalTime = 0;
@ -135,7 +140,6 @@ public class MusicFrom
var a = Program.chars.GetLength(0);
var b = Program.chars.GetLength(1);
var buffer = new StringBuilder();
ConsoleColor xiantiaoColor = Program.random.Next(0, 2) == 0 ? ConsoleColor.Red : ConsoleColor.Blue;//线条的颜色
while (Program.IsWhile)
{
stopwatch.Restart();
@ -146,9 +150,6 @@ public class MusicFrom
{
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);
time++;
if (time > 100000)
@ -225,6 +226,9 @@ public class MusicFrom
//这样闪烁不会太严重
Thread.Sleep(50);
}
// 恢复控制台输入模式
mode |= ENABLE_ECHO_INPUT | ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT;
SetConsoleMode(hStdin, mode);
}
private void setCharArry()
{

View File

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