复制和粘贴命令提示符会导致冻结的控制台应用程序进度

时间:2012-04-25 14:37:18

标签: c# multithreading visual-studio console console-application

我正在使用Visual Studio和C#编写控制台应用程序。我不断地将调试信息打印到控制台窗口。

程序非常简单,它只是多次查询多个数据库并将值存储在我的中央数据库中。这样做总共超过900次。在查询数据库时,它偶尔会(并随机地)在控制台窗口上停止,并停止打印出调试信息或在程序中继续进行。 奇怪的是,当我突出显示窗口并右键单击(复制)时,这似乎会使程序恢复生机并再次开始工作!

有谁知道造成这种情况的原因是什么?这是我之前在节目中见过的最奇特的行为!

1 个答案:

答案 0 :(得分:1)

如果用户不小心点击黑色控制台窗口,光标将变为填充的白色矩形,应用程序将挂起,直到另一个clic为止。

启用“QuickEdit模式”时,它是控制台窗口的一般功能。

要禁用该功能,您应该在运行时取消选中应用控制台窗口的“QuickEdit Mode”选项。

或以编程方式禁用它:

// http://msdn.microsoft.com/en-us/library/ms686033(VS.85).aspx
    [DllImport("kernel32.dll")]
    public static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);

    private const uint ENABLE_EXTENDED_FLAGS = 0x0080;

    static void Main(string[] args)
    {
         IntPtr handle = Process.GetCurrentProcess().MainWindowHandle;
         SetConsoleMode(handle, ENABLE_EXTENDED_FLAGS);