좋아요, 저는 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가이 효과 (팝업 창 없음, 콘솔 창에 실시간으로 작성된 전체 출력)를 달성했기 때문에 이것이 가능하다는 것을 알고 있습니다. 내가 가까이에 있지만 느긋하게 느껴질 수 있습니다. ..
....................................... THERES ACOM? !!? ! 나는 이것을 어떻게 보지 못했을 까! 오, 제 GAWD 예, 방금 두통과 고통의 시간을 절약! : D (havent는 아직 시도했지만, 이것이 마법의 티켓이라고 확신합니다.) – RedactedProfile
이것은 분명히 효과가 있었고,이 대단히 감사합니다. 나는 매우 낙담하기 시작했다. – RedactedProfile
문제 없어요. :) – Phillip