0

좋아요, 저는 piddle foot을하지 않고 무엇을하고 있는지에 대해 춤을 추지 않을 것입니다. 곧장, C#의 Unreal Development Kit 용 GUI UnrealScript 컴파일러를 만들려고합니다. 정확한 성질은 더 큰 것이지만 이것은 일어난 일입니다 :C# - 새 프로세스의 하위 창에서 출력 캡처

새 프로세스를 시작하는 새 스레드를 시작하고 콘솔 창에 기록 될 때 출력을 캡처하는 수신기가있는 스트림 리더를 설정합니다 . UDK.exe make을 실행할 때 실제 컴파일러 인 하위 콘솔 창을 생성하는 것처럼 보이는 것을 제외하면 이것은 문제가되지 않습니다. 까지 내가 할 수있는 (I 내 UDK/Binaries/Win32 디렉토리에 이상 CD, 그리고 UDK.exe make >> output.txt 절대적으로 아무것도 기록되지 도착 명령을 수행하지만 파일이 생성된다 (물론 컴파일러뿐만 아니라 실행하는 경향이있다) 내가 사용하고

을 경우 말해봐) threadsafe 작업은 컴파일러가 실행 중일 때 쓰고 싶은 출력 텍스트 박스에 접근한다. Heres는

내 코드 : 내가 컴파일 할 수있는 방법을 실행할 때 순간

public partial class ProjectEditor : Form 
{ 
    delegate void SetTextCallback(string text); 

    /*** ... other completely unrealted code ... ***/ 

    private void Menu_Project_Compile_JustCompile_Click(object sender, EventArgs e) { 
     Thread compile = new Thread( 
      new ThreadStart (
       this.Compile 
      ) 
     ); 
     NewConsoleLine("Starting Compiler New"); 
     compile.Start(); 
    } 


    //////// 

    private void Compile() { 
     this.RunWithRedirect(FileMan.getUDK(), " make"); 
    } 

    void RunWithRedirect(string cmdPath, string args = null) { 

     var proc = new Process(); 
     proc.StartInfo.FileName = cmdPath; 
     proc.StartInfo.Arguments = args; 

     proc.StartInfo.RedirectStandardOutput = true; 
     proc.StartInfo.RedirectStandardError = true; 
     proc.EnableRaisingEvents = true; 
     proc.StartInfo.CreateNoWindow = true; 

     proc.StartInfo.UseShellExecute = false; 

     proc.ErrorDataReceived += proc_DataReceived; 
     proc.OutputDataReceived += proc_DataReceived; 

     proc.Start(); 

     proc.BeginErrorReadLine(); 
     proc.BeginOutputReadLine(); 

     proc.WaitForExit(); 

    } 

    void proc_DataReceived(object sender, DataReceivedEventArgs e) { 
     NewConsoleLine(e.Data); 
    } 

    void NewConsoleLine(String text) { 
     if (this.OutputConsole.InvokeRequired) { 
      SetTextCallback d = new SetTextCallback(NewConsoleLine); 
      this.Invoke(d, new object[] { text }); 
     } else { 
      OutputConsole.Text += text + "\n"; 
     } 
    } 
} 

, 내 콘솔에 기록됩니다 라인 Starting Compiler New과 UDK.exe 콘솔 창이 보여없이 출력이 달려 겉으로보기에는 영원히.

실제 출력을 캡처하는 데 스 트리머를 조정하는 방법에 대한 통찰력이있는 사람이 있습니까? 언리얼 스크립트를위한 다른 IDE가이 효과 (팝업 창 없음, 콘솔 창에 실시간으로 작성된 전체 출력)를 달성했기 때문에 이것이 가능하다는 것을 알고 있습니다. 내가 가까이에 있지만 느긋하게 느껴질 수 있습니다. ..

답변

1

UDK.com make을 실행 해 봅니다. 그러면 컴파일러가 실행되는 창에서 컴파일러가 실행됩니다.

+0

....................................... THERES ACOM? !!? ! 나는 이것을 어떻게 보지 못했을 까! 오, 제 GAWD 예, 방금 두통과 고통의 시간을 절약! : D (havent는 아직 시도했지만, 이것이 마법의 티켓이라고 확신합니다.) – RedactedProfile

+0

이것은 분명히 효과가 있었고,이 대단히 감사합니다. 나는 매우 낙담하기 시작했다. – RedactedProfile

+0

문제 없어요. :) – Phillip