当我在控制台中选择某个区域时,我的 UI 挂起

Vol*_*da2 0 .net console c++-cli

我将消息记录到控制台。但我有一些有趣的效果。当我在控制台中选择一些消息时,我的 UI 挂起。当我在控制台中取消选择所有内容时,UI 将处于活动状态。我不喜欢这种行为。

有什么解决办法吗?

Console::WriteLine("Message");  
Run Code Online (Sandbox Code Playgroud)

Ale*_*nko 6

您可以以编程方式在控制台中禁用快速编辑模式:

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,
    }
}
Run Code Online (Sandbox Code Playgroud)