さて、私がやっていることの周りを歩いて踊りません。 ストレートアップ、C#のUnreal Development Kit用のGUI UnrealScriptコンパイラを作成しようとしています。C# - 新しいプロセスの子ウィンドウからの出力をキャプチャする
新しいプロセスを開始する新しいスレッドを開始し、コンソールウィンドウに書き込まれるときに出力をキャプチャするリスナを持つストリームリーダーを設定します。 。 UDK.exe make
を起動すると、実際のコンパイラの子コンソールウィンドウが生成されているように見えますが、これは問題ありません。 限り私ができるように(I私UDK/Binaries/Win32
ディレクトリにオーバーCD
、とはUDK.exe make >> output.txt
は絶対に何も書き込まれません取得するコマンドを実行しますが、ファイルが作成されます(そしてもちろん、コンパイラが同様に実行する傾向がある)私が使用しています
をした場合私は、コンパイラが実行されているときに書きたい出力テキストボックスにアクセスするためにスレッドセーフな操作を行います。相続人
私のコード:私はコンパイルする方法を実行した瞬間に
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コンソールウィンドウが表示され、出力なしとそこにハングアップします一見永遠に
実際の出力をキャプチャするためにストリーマを調整する方法については、誰にも分かりませんか? UnrealScript用の他のIDEがこの効果を達成するのを見たので、これは可能です。(ポップアップウィンドウなし、コンソールウィンドウにリアルタイムで書き込まれたフル出力) 私は近くにいると感じることができます。 ..
............................... THERES A .COM?!!? !どのように私はこれを見ませんでした!ああ私のGAWDはい、あなたはちょうど頭痛と苦しみの時間を節約! :D(haventはまだ試しましたが、これは魔法のチケットだと確信しています) – RedactedProfile
これは間違いなく機能しています。私は非常に落胆し始めていた – RedactedProfile
問題はありません。 :) – Phillip