我将消息记录到控制台。但我有一些有趣的效果。当我在控制台中选择一些消息时,我的 UI 挂起。当我在控制台中取消全选时,UI 会活着。我不喜欢这样的行为。
有什么解决办法吗?
Console::WriteLine("Message");
您可以在控制台中以编程方式禁用快速编辑模式:
class Program {
static void Main(string[] args) {
uint mode;
IntPtr stdIn = GetStdHandle(STD_INPUT_HANDLE);
if (GetConsoleMode(stdIn, out mode)) {
if ((mode & (uint) ConsoleModes.ENABLE_QUICK_EDIT_MODE) != 0) {
mode = mode ^ (uint) ConsoleModes.ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(stdIn, mode);
}
}
int i = 0;
while (true) {
Thread.Sleep(300);
Console.WriteLine(i++);
}
}
const int STD_INPUT_HANDLE = -10;
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll")]
static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
[DllImport("kernel32.dll")]
static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);
[Flags()]
enum ConsoleModes : uint {
ENABLE_PROCESSED_INPUT = 0x1,
ENABLE_LINE_INPUT = 0x2,
ENABLE_ECHO_INPUT = 0x4,
ENABLE_WINDOW_INPUT = 0x8,
ENABLE_MOUSE_INPUT = 0x10,
ENABLE_INSERT_MODE = 0x20,
ENABLE_QUICK_EDIT_MODE = 0x40,
ENABLE_EXTENDED_FLAGS = 0x80,
ENABLE_AUTO_POSITION = 0x100,
}
}
您正在控制台中选择文本。您可以想象,如果控制台继续输出信息,则很难选择您要选择的内容,因此系统会暂停可见更新。如果您希望您的应用程序继续显示可见更新,请停止选择屏幕上的文本。
这并不特定于您的应用程序,它的“功能”适用于所有控制台应用程序。选择文本时 - 整个应用程序挂起。此行为无法更改。