3つのコントロールを持つフォームがあります。
- ユーザーがコンソールアプリケーションに送信するコマンドを入力するためのテキストボックス、
- 送信するコマンドを確認するためのボタンと
- アプリケーションからの出力を表示するための読み取り専用テキストボックス。
私が欲しいのは、ユーザーが最初のテキストボックスにコマンドを入力し、ボタンを押して入力し、2番目のテキストボックスを介してフィードバックを受け取ることです。
使い方は知っていますProcessStartInfo.RedirectStandardOutput
が、使用するとアプリがハングしますStandardOutput.ReadToEnd()
。
非同期を確認しましたProcess.BeginOutputReadLine()
が、アプリがハングしなくても、どういうわけかテキストボックスに応答がなく、まったく何も起こりません。
これが私のコードです:
public partial class MainForm : Form
{
private void MainForm_Load(object sender, EventArgs e)
{
InitializeInterpreter();
}
private void InitializeInterpreter()
{
InterProc.StartInfo.UseShellExecute = false;
InterProc.StartInfo.FileName = "app.exe";
InterProc.StartInfo.RedirectStandardInput = true;
InterProc.StartInfo.RedirectStandardOutput = true;
InterProc.StartInfo.RedirectStandardError = true;
InterProc.StartInfo.CreateNoWindow = true;
InterProc.OutputDataReceived += new DataReceivedEventHandler(InterProcOutputHandler);
InterProc.Start();
}
private static void InterProcOutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (!String.IsNullOrEmpty(outLine.Data))
{
OutputTextBox.Append(Environment.NewLine + outLine.Data);
}
}
private void Enterbutton_Click(object sender, EventArgs e)
{
InterProc.StandardInput.Write(CommandtextBox.Text);
InterProc.BeginOutputReadLine();
}
}
これをスムーズに実行する方法はありますか?ありがとう。