私はC#で代替Windowsシェルを作成しています。現在実装している機能は、同じシェルウィンドウ内にすべてのIOを持っています。C#Shell - IOリダイレクト
今、出力する部分的な解決策があります。これは(pは、実行中のプロセスである)私のコードである:
while (!p.HasExited) {
/* ... - irrelevant */
if (redirect) {
try {
p.BeginOutputReadLine();
} catch { }
}
}
処理が全て正しいプロパティで設定され、= False
などUseShellExecute
、RedirectStandard{Input, Output, Error}
= True
、およびイベントハンドラが正しく設定されています、それは矛盾している。
私はtry/catch(私は非常に悪い習慣であることがわかっています)を取り出して、ハンドラが実行されたときにfalseに設定されたbusy boolを使用しましたが、何らかの理由でまだInvalidOperationException p.BeginOutputReadLine() - 既に非同期操作が実行中であることを示します。
上記のものとまったく異なる解決策が必要な場合でも、それを固定するのではなく、助けてください。
ありがとうございました。
EDIT:ここでは、プロセスを開始するコードです。また
if (redirect)
{
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.UseShellExecute = false;
p.OutputDataReceived += new DataReceivedEventHandler(redirectHandler_StdOut);
p.ErrorDataReceived += new DataReceivedEventHandler(redirectHandler_StdErr);
}
p.Start();
が、私は一貫性のないことで何を意味するか説明していないよことに気づきました。通常、非同期で実行開始を前に付け
プロセスを開始するコードはどのように見えますか? –
私はちょうど今質問を更新するでしょう:) –