Выделите консоль для приложения WinForm - PullRequest
6 голосов
/ 27 февраля 2010

Я использую следующий код для выделения консоли для приложения WinForm. Окно консоли отображается успешно, и вывод есть. Но когда я закрываю окно консоли, мое приложение WinForm закрывается одновременно. Зачем? Я хочу сохранить окно WinForm.

private void btn_to_console_Click(object sender, EventArgs e)
{
    if (NativeMethods.AllocConsole())
    {
        lbl_console_alloc_result.Text = "Console allocation successfully!";
        IntPtr stdHandle = NativeMethods.GetStdHandle(NativeMethods.STD_OUTPUT_HANDLE);
        Console.WriteLine("from WinForm to Console!");
        lbl_console_alloc_result.Text = Console.ReadLine();
    }
    else
        lbl_console_alloc_result.Text = "Console allocation failed!";
}

[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "GetStdHandle")]
public static extern System.IntPtr GetStdHandle(Int32 nStdHandle);

/// Return Type: BOOL->int
[System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "AllocConsole")]
[return: System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)]
public static extern bool AllocConsole();

Заранее спасибо ...

1 Ответ

6 голосов
/ 27 февраля 2010

Закрытие консольного окна отключит любое приложение - будь то консольное приложение, Windows Forms, собственное приложение Windows или приложение WPF. Это «особенность» консольных окон.

Если вам не нужно это поведение, вам следует просто создать собственное окно для отображения выходных данных вместо использования консольного окна. В противном случае вам нужно вызвать FreeConsole вместо закрытия окна, чтобы отсоединить приложение от окна консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...