我是基于控制台的服务器软件的开发人员,在按下Enter之前,有时似乎会锁定输入。我怀疑这是System.Console窗口中的XOFF / XON(Ctrl-S / Ctrl-Q流控制)处理。
是否可以(使用.NET调用或Win32 API函数)在使用System.Console输出和输入命令的C#/ .NET应用程序中禁用XOFF / XON流控制处理? (这也影响其他系统控制台,如CMD.EXE窗口,但我不关心这些情况。)我的应用程序是服务器软件;不会想要一个冻结控制台的钥匙,特别是那个可能会被意外触发的钥匙。
不知怎的,我相信我的服务器应用程序的控制台正在输入一个Ctrl-S,或者当输入S时,可能认为按下了限定符。控制台锁定,直到我按Enter键。 (我认为Ctrl-Q也会释放它,但还没有机会再测试它。)
我的进程是.NET上的C#服务器,这些是在运行Windows Server的Hyper-V VM上使用System.Console.ReadLine()的控制台。
这可能对问题原因至关重要:我通过远程桌面(RDP)连接到Hyper-V主机。一个想法是RDP断开连接失去一个Ctrl键,然后下一个' S'输入(由我们的命令自动化软件)锁定终端。我们最终用基于网络的命令输入取而代之,但与此同时我们正在解决这个问题,需要员工进行人工干预才能让服务器再次运行。
更多信息:我试过以下内容,以防由平板电脑的RDP会话触发快速编辑模式,但这并没有阻止锁定:
GetConsoleMode(handle, out oldmode);
int newmode = oldmode;
newmode |= ENABLE_EXTENDED_FLAGS; // required to disable the next two
newmode &= ~ENABLE_QUICK_EDIT_MODE; // force this OFF
newmode &= ~ENABLE_MOUSE_INPUT; // force this OFF
newmode &= ~ENABLE_WINDOW_INPUT; // force this OFF
newmode |= ENABLE_INSERT_MODE; // force this ON
if (newmode != oldmode)
{
SetConsoleMode(handle, newmode);