我在我的服务器上运行了一个socket服务器,当我醒来时,收到了许多关于其无法访问的消息。结果发现,在睡觉前,我在窗口中突出显示了一个IP地址,忘记按Enter键恢复进程。
这是我现在如何禁用控制台中的选择,但我仍希望能够在不暂停应用程序的情况下进行选择。
#region Disable Quick-Edit Mode
[DllImport("kernel32.dll")]
static extern bool SetConsoleMode(IntPtr hConsoleHandle, int mode);
[DllImport("kernel32.dll")]
static extern bool GetConsoleMode(IntPtr hConsoleHandle, out int mode);
[DllImport("kernel32.dll")]
static extern IntPtr GetStdHandle(int handle);
const int STD_INPUT_HANDLE = -10;
const int ENABLE_EXTENDED_FLAGS = 0x80;
public static void DisableQuickEditMode()
{
int mode;
IntPtr handle = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(handle, out mode);
mode |= ENABLE_EXTENDED_FLAGS;
SetConsoleMode(handle, mode);
mode &= ~ENABLE_QUICK_EDIT;
SetConsoleMode(handle, mode);
}
我真的不想回到命令提示符的传统模式,因为这些新功能确实有助于开发人员,但我需要找到一种方法,在暂停控制台时防止应用程序停止。
有趣的是,今天早上当我按下Enter键时,所有已尝试的连接都被处理了,然后在处理完它们后,它们被关闭了。这让我想知道,也许我写的应用程序有问题;我需要一个“Console”线程和一个“Server”线程。但我不确定这会有什么区别。
Console.WriteLine()
这样的调用完成,因为输出缓冲区已满。这个问题与编程无关,它是一个基本的Windows用户主题。 - Peter Duniho