1

我将消息记录到控制台。但我有一些有趣的效果。当我在控制台中选择一些消息时,我的 UI 挂起。当我在控制台中取消全选时,UI 会活着。我不喜欢这样的行为。

有什么解决办法吗?

Console::WriteLine("Message");  
4

3 回答 3

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,
    }
}
于 2013-04-01T20:38:18.727 回答
1

您正在控制台中选择文本。您可以想象,如果控制台继续输出信息,则很难选择您要选择的内容,因此系统会暂停可见更新。如果您希望您的应用程序继续显示可见更新,请停止选择屏幕上的文本。

于 2013-04-01T20:04:28.707 回答
-1

这并不特定于您的应用程序,它的“功能”适用于所有控制台应用程序。选择文本时 - 整个应用程序挂起。此行为无法更改。

于 2013-04-01T20:05:19.523 回答