Ich habe ein Problem mit der Anzeige der Ergebnisse von cmd-Befehlen in richtextbox. Bisher ich habe diesen Code:Geben Sie den Befehl cmd ein, zeigen Sie das Ergebnis in richtextbox an C#
private void richTextBox2_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
e.SuppressKeyPress = true;
ProcessStartInfo cmdStartInfo = new ProcessStartInfo();
cmdStartInfo.FileName = @"C:\Windows\System32\cmd.exe";
cmdStartInfo.RedirectStandardOutput = true;
cmdStartInfo.RedirectStandardError = true;
cmdStartInfo.RedirectStandardInput = true;
cmdStartInfo.UseShellExecute = false;
cmdStartInfo.CreateNoWindow = true;
Process cmdProcess = new Process();
cmdProcess.StartInfo = cmdStartInfo;
cmdProcess.OutputDataReceived += cmd_DataReceived;
cmdProcess.EnableRaisingEvents = true;
cmdProcess.Start();
cmdProcess.BeginOutputReadLine();
cmdProcess.BeginErrorReadLine();
cmdProcess.StandardInput.WriteLine(richTextBox2.Text);
cmdProcess.StandardInput.WriteLine("exit");
cmdProcess.WaitForExit();
richTextBox1.Text = richTextBox1.Text + cmd_DataReceived + Environment.NewLine;
}
}
static void cmd_DataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine("Output from other process");
Console.WriteLine(e.Data);
}
Ich habe versucht zu ersetzen "Console.WriteLine (e.Data);" mit "richTextBox1.Text = richTextBox1.Text + (e.Data);" aber es würde nicht akzeptiert werden. Ich habe auch versucht "RichTextBox1.Text = RichTextBox1.Text + cmd_DataReceived"; Aber das hat iether nicht funktioniert. Dann habe ich versucht zu ersetzen Console.WriteLine mit messagebox.show (e.data) aber wieder .. nee Die Befehle funktionieren, aber es wird
nicht angezeigt Ich weiß, dass ich die meisten der Code kopiert, und es ist wahrscheinlich gemeint für eine Konsolenanwendung.
Bitte helfen
Es ist nicht klar, was Sie versuchen, hier zu tun. Sie schreiben den Inhalt der Richtextbox in den InputStream, so dass Sie anscheinend die Argumente für die cmd.exe in die Richtextbox schreiben und sie dann an die Eingabeaufforderung übergeben möchten, aber Ihre Frage fragt, ob die Ergebnisse in der Richtextbox angezeigt werden sollen. Übrigens gibt es in einem Aufruf von CMD.EXE ohne Parameter keine Ausgabe. – Steve
hmm. dann ist das fast unmöglich, außer wenn ich alle Eingabeaufforderungsantworten zu allen Befehlen hinzufüge. Und ja, ich denke du hast es richtig verstanden. – KrisPus
Ich half jemandem, etwas Ähnliches zu tun. Ihr Code sieht gut aus, ich denke * Ihr einziges Problem ist, dass Ereignisse in einem eigenen Thread ausgeführt werden und Sie die Benutzeroberfläche nicht aus einem Thread aktualisieren können. Sie können sie nur über den UI-Thread aktualisieren. Ein wenig außerhalb meines Elements, aber Sie müssen Invoke oder BeginInvoke verwenden und möglicherweise mit einem Dispatcher, zB [hier] (http://stackoverflow.com/questions/4446048/how-to-update-textboxes-in- -main-thread-from-ahead-thread) und [hier] (http://stackoverflow.com/questions/19009174/dispatcher-invoke-vs-begininvoke-confusion). – Quantic