我使用OutputDataReceived打印RichTextBox中进程的输出。有时,进程需要一些用户输入,我无法处理我的条件,因为用户需要在同一行输入输入,而不是新行,因此条件永远不会启动,程序停止等待输入
public ASFProcess(ASFui asf, RichTextBox rtb)
{
_asf = asf;
ASF = new Process();
output = rtb;
var ASFInfo = new ProcessStartInfo()
{
Arguments = "--server",
CreateNoWindow = true,
Domain = "",
FileName = Properties.Settings.Default.ASFBinary,
LoadUserProfile = false,
Password = null,
RedirectStandardError = true,
RedirectStandardInput = true,
RedirectStandardOutput = true,
StandardErrorEncoding = Encoding.UTF8,
StandardOutputEncoding = Encoding.UTF8,
UseShellExecute = false,
WindowStyle = ProcessWindowStyle.Hidden
};
ASF.StartInfo = ASFInfo;
ASF.OutputDataReceived += OutputHandler;
}
private void OutputHandler(object sender, DataReceivedEventArgs e)
{
if (e.Data.EndsWith("input:"))
{
var result = Interaction.InputBox(e.Data, @"Enter necessary input");
ASF.StandardInput.WriteLine(result);
ASF.StandardInput.Flush();
}
...
}
例如:
This line is printed in the richtextbox, because it doesn't require an input.
Enter your input: _ (This is when the prompt must be shown)
This line is never shown because the process is waiting an input.
感谢。
答案 0 :(得分:0)
你可以更容易地做同样的事情,但在控制台中,正如所说的那样。
不会使文本框在每个输入上触发事件,因为这会在您添加的每个字符上触发事件。
如果您真的想使用文本框,我建议您添加一个"提交"文本框下方的按钮,可用于触发事件。
OR
你可以绑定一个像Enter一样的按钮,当光标在文本框内并按Enter键时抛出一个事件