Как закрыть / открыть консоль в C # с помощью вызовов Win32?

Следующая программа выдает ошибку «Console.ReadKey ()».

Как повторно включить консоль после ее отключения?

    using System;
    using System.Threading;
    using System.Runtime.InteropServices;

    namespace ConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                ThreadPool.QueueUserWorkItem((o) =>
                {
                    Thread.Sleep(1000);
                    IntPtr stdin = GetStdHandle(StdHandle.Stdin);
                    CloseHandle(stdin);
                });
                Console.ReadLine();
                Console.Write("ReadLine() successfully aborted by background thread.\n");
                Console.Write("[any key to exit]");
                Console.ReadKey(); // Throws an exception "Cannot read keys when either application does not have a console or when console input has been redirected from a file. Try Console.Read."
            }

            // P/Invoke:
            private enum StdHandle { Stdin = -10, Stdout = -11, Stderr = -12 };
            [DllImport("kernel32.dll")]
            private static extern IntPtr GetStdHandle(StdHandle std);
            [DllImport("kernel32.dll")]
            private static extern bool CloseHandle(IntPtr hdl);
        }
    }

Дополнительно для экспертов

Если вам интересно, мне нужно иметь возможность убить фоновый поток, выполняющий ReadLine (), в C #. Похоже, это единственный способ (thread.Abort не будет работать, потому что ReadLine () работает глубоко внутри недр операционной системы, в неуправляемом коде). На StackOverflow много говорят на эту тему, никто еще не нашел (или не опубликовал) удовлетворительный метод прерывания Console.ReadLine (). Я думаю, что этот код находится на правильном пути - если только мы сможем повторно включить консоль после ее отключения.

Ответы на вопрос(2)

Ваш ответ на вопрос