优化控制台输入模式的设置逻辑,调整输入模式恢复时机
This commit is contained in:
parent
f2719bb41d
commit
b855a18a43
|
@ -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()
|
||||||
{
|
{
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user