C# Диалог с процессом командной строки - PullRequest
0 голосов
/ 06 августа 2020

Я хочу запустить процесс в консоли windows, после этого я хочу передать (нажатием кнопки) несколько команд и увидеть результат в RichTextBox.

Я могу запустить программа и прочитала ответы после запуска, но когда я пытаюсь отправить какие-либо команды, это не работает. Я не могу «говорить» с процессом…

Если у вас есть идеи. Приму с удовольствием!

Ниже кода:

public static void SortOutputHandler(object sendingProcess, DataReceivedEventArgs outLine) {
    // Collect the sort command output.
    if (!String.IsNullOrEmpty(outLine.Data)) {
        numOutputLines++;
        // Add the text to the collected output.
        sortOutput.Append(Environment.NewLine + $"[{numOutputLines}] - {outLine.Data}");
        //RichTextBox
        MCM.ActiveForm.Invoke(MCM.AffichageTextDelegate, new object[] { outLine.Data });
    }
}
   
public static async Task<int> RunProcessAsync() {
    using (var process = new Process {
        StartInfo = {
            FileName = "AAA.exe",
            Arguments = “-v COM74",
            UseShellExecute = false, 
            CreateNoWindow = false,
            RedirectStandardOutput = true,
            RedirectStandardInput = true,
            RedirectStandardError = true
        },
        EnableRaisingEvents = true 
    })
    { return await RunProcessAsync(process).ConfigureAwait(false); }
}

private static Task<int> RunProcessAsync(Process process) {
    var tcs = new TaskCompletionSource<int>();
    
    process.Exited += (s, ea) => tcs.SetResult(process.ExitCode);
    process.OutputDataReceived += (s, ea) => Console.WriteLine(ea.Data);
    sortOutput = new StringBuilder();
    process.OutputDataReceived += SortOutputHandler;
    process.ErrorDataReceived += (s, ea) => Console.WriteLine("ERR: " + ea.Data);
    
    process.Start();
    
    process.BeginOutputReadLine();
    process.BeginErrorReadLine();
    
    return tcs.Task;
}

private async void Btn_Click(object sender, EventArgs e) {
    await RunProcessAsync();
}
...