2010-02-27 7 views
6

Uso il seguente codice per allocare una console per un'applicazione WinForm. La finestra della console appare correttamente e l'output è lì. Ma quando chiudo la finestra della console, la mia applicazione WinForm viene chiusa allo stesso tempo. Perché? Voglio mantenere la finestra WinForm.Assegnare una console per un'applicazione 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(); 

Grazie in anticipo ...

+0

Controlla questo thread: http://stackoverflow.com/questions/533491/how-to-use-setconsolehandler-to-block-exit-calls –

+0

grazie, nobugz. Aiuta. : D – smwikipedia

risposta

6

Chiusura una finestra di console si spegne qualsiasi applicazione -se un'applicazione console, Windows Forms, nativo di Windows app, o un'applicazione WPF. Questa è una "caratteristica" delle finestre di console.

Se non si desidera questo comportamento, è consigliabile creare una finestra personalizzata per visualizzare l'output anziché utilizzare una finestra della console. In caso contrario, è necessario chiamare FreeConsole anziché chiudere la finestra per staccare l'applicazione dalla finestra della console.

+0

Grazie, Reed, grazie. Sembra che ho bisogno di ottenere un dizionario su Win32 API.:D – smwikipedia