2014-07-16 4 views
0

내 WPF 앱과 함께 콘솔을 사용하여 디버그 정보를 출력합니다. 콘솔은 다음과 같이 열립니다 :콘솔에 인쇄 된 출력이 표시되지 않습니다.

static class DebugConsole //Console window handling class 
{ 
    [DllImport("Kernel32")] 
    private static extern bool AllocConsole(); 

    [DllImport("Kernel32")] 
    private static extern bool FreeConsole(); 

    [DllImport("Kernel32")] 
    private static extern IntPtr GetConsoleWindow(); 

    [DllImport("Kernel32")] 
    private static extern int GetConsoleOutputCP(); 

    public static bool HasConsole 
    { 
     get { return GetConsoleWindow() != IntPtr.Zero; } 
    } 

    static public void Open() //Open console window 
    { 
     AllocConsole(); 

     Console.WriteLine("test"); 

    } 
} 

.. 한편 편집기의 다른 부분에서 .. 내가 위의 코드와 응용 프로그램을 실행하면 예상대로

public MainWindow() //This gets executed when the application starts 
    { 
     DebugConsole.Open(); 

     InitializeComponent();        
    } 

이 모든 것이 작동합니다. 콘솔 창이 열리고 "test"라는 단어가 콘솔에 인쇄됩니다.

그러나, 나는이에 MainWindow를() 코드를 변경하는 경우 :

public MainWindow() //This gets executed when the application starts 
    { 
     Console.WriteLine("test1"); 

     DebugConsole.Open(); 

     InitializeComponent();        
    } 

하고 응용 프로그램을 실행을 ...

예상 출력 : 콘솔가 열리고 그것은 텍스트

의 두 줄이 포함됩니다
test1 
test 

실제 출력 : 콘솔이 열리고 텍스트가 전혀 표시되지 않습니다. 사실, 나는 Console.WriteLine을 코드에서 원하는 모든 것을 사용할 수 있으며 콘솔은 비어 있습니다. Console.WriteLine을 사용하지 않으면 콘솔이 열리기 전에 만 작동합니다.

왜 이런 일이 발생합니까? 어떻게 수정해야합니까?

+0

코드에 작은 콘솔 앱을 만들 수 있었고 예상 한 출력을 얻었습니다 (첫 번째 줄에는 test1, 두 번째 줄에는 test). MainWindow() 메서드에서 중단 점을 설정하여 예상대로 실행되는지 확인 했습니까? 출력을 줄 단위로 보려면 그 단계를 밟아 볼 수 있습니다. –

답변

0

콘솔을 초기화 한 후 인쇄하십시오. Console.WriteLine("test1") 전환하고 DebugConsole.Open()

편집 : 당신이 내가 반환 생각 콘솔을 초기화하지 않고 Console.Writeline을 사용하십시오 NullStream() (당신이 유닉스에 널 (null)로 데이터를 리디렉션 할 때처럼) 그러나 당신이 호출 할 때 open 당신의 쓰기 방법은을 사용하여 실제 표준 출력. 그래서 기본적으로 사용되는 스트림은 NullStream()입니다. 그렇지 않으면 표준 출력입니다. check reference source

+0

나는 이것을 이미 알고있다. 왜 작동하지 않는지 묻습니다. – user3595338

관련 문제