Process.OutputDataReceived Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt jedes Mal auf, wenn eine Anwendung eine Zeile in ihren umgeleiteten StandardOutput-Stream schreibt.
public:
event System::Diagnostics::DataReceivedEventHandler ^ OutputDataReceived;
public event System.Diagnostics.DataReceivedEventHandler? OutputDataReceived;
public event System.Diagnostics.DataReceivedEventHandler OutputDataReceived;
[System.ComponentModel.Browsable(true)]
public event System.Diagnostics.DataReceivedEventHandler OutputDataReceived;
member this.OutputDataReceived : System.Diagnostics.DataReceivedEventHandler
[<System.ComponentModel.Browsable(true)>]
member this.OutputDataReceived : System.Diagnostics.DataReceivedEventHandler
Public Custom Event OutputDataReceived As DataReceivedEventHandler
Public Event OutputDataReceived As DataReceivedEventHandler
Ereignistyp
- Attribute
Beispiele
Im folgenden Beispiel wird veranschaulicht, wie asynchrone Lesevorgänge für den umgeleiteten Stream des ipconfig
Befehls ausgeführt werdenStandardOutput.
Im Beispiel wird ein Ereignisdelegat für den OutputHandler
Ereignishandler erstellt und dem OutputDataReceived Ereignis zugeordnet. Der Ereignishandler empfängt Textzeilen aus dem umgeleiteten StandardOutput Stream, formatiert den Text und speichert ihn in einer Ausgabezeichenfolge, die später im Konsolenfenster des Beispiels angezeigt wird.
using namespace System;
using namespace System::IO;
using namespace System::Diagnostics;
using namespace System::Text;
ref class StandardAsyncOutputExample
{
private:
static int lineCount = 0;
static StringBuilder^ output = nullptr;
public:
static void Run()
{
Process^ process = gcnew Process();
process->StartInfo->FileName = "ipconfig.exe";
process->StartInfo->UseShellExecute = false;
process->StartInfo->RedirectStandardOutput = true;
output = gcnew StringBuilder();
process->OutputDataReceived += gcnew DataReceivedEventHandler(OutputHandler);
process->Start();
// Asynchronously read the standard output of the spawned process.
// This raises OutputDataReceived events for each line of output.
process->BeginOutputReadLine();
process->WaitForExit();
// Write the redirected output to this application's window.
Console::WriteLine(output);
process->WaitForExit();
process->Close();
Console::WriteLine("\n\nPress any key to exit");
Console::ReadLine();
}
private:
static void OutputHandler(Object^ sender, DataReceivedEventArgs^ e)
{
// Prepend line numbers to each line of the output.
if (!String::IsNullOrEmpty(e->Data))
{
lineCount++;
output->Append("\n[" + lineCount + "]: " + e->Data);
}
}
};
int main()
{
StandardAsyncOutputExample::Run();
}
using System;
using System.IO;
using System.Diagnostics;
using System.Text;
class StandardAsyncOutputExample
{
private static int lineCount = 0;
private static StringBuilder output = new StringBuilder();
public static void Main()
{
Process process = new Process();
process.StartInfo.FileName = "ipconfig.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
{
// Prepend line numbers to each line of the output.
if (!String.IsNullOrEmpty(e.Data))
{
lineCount++;
output.Append("\n[" + lineCount + "]: " + e.Data);
}
});
process.Start();
// Asynchronously read the standard output of the spawned process.
// This raises OutputDataReceived events for each line of output.
process.BeginOutputReadLine();
process.WaitForExit();
// Write the redirected output to this application's window.
Console.WriteLine(output);
process.WaitForExit();
process.Close();
Console.WriteLine("\n\nPress any key to exit.");
Console.ReadLine();
}
}
Imports System.IO
Imports System.Diagnostics
Imports System.Text
Module Module1
Dim lineCount As Integer = 0
Dim output As StringBuilder = New StringBuilder()
Sub Main()
Dim process As New Process()
process.StartInfo.FileName = "ipconfig.exe"
process.StartInfo.UseShellExecute = False
process.StartInfo.RedirectStandardOutput = True
AddHandler process.OutputDataReceived, AddressOf OutputHandler
process.Start()
' Asynchronously read the standard output of the spawned process.
' This raises OutputDataReceived events for each line of output.
process.BeginOutputReadLine()
process.WaitForExit()
Console.WriteLine(output)
process.WaitForExit()
process.Close()
Console.WriteLine(Environment.NewLine + Environment.NewLine + "Press any key to exit.")
Console.ReadLine()
End Sub
Sub OutputHandler(sender As Object, e As DataReceivedEventArgs)
If Not String.IsNullOrEmpty(e.Data) Then
lineCount += 1
' Add the text to the collected output.
output.Append(Environment.NewLine + "[" + lineCount.ToString() + "]: " + e.Data)
End If
End Sub
End Module
Hinweise
Das OutputDataReceived -Ereignis gibt an, dass der zugeordnete Process eine Zeile geschrieben hat, die mit einer Neuen Zeile (Carriage Return, CR), Zeilenvorschub (LF) oder CR+LF in seinen umgeleiteten StandardOutput Stream beendet wird.
Das Ereignis wird bei asynchronen Lesevorgängen für StandardOutputaktiviert. Um asynchrone Lesevorgänge zu starten, müssen Sie den Stream eines Processumleiten, ihren Ereignishandler dem OutputDataReceived Ereignis hinzufügen und aufrufenBeginOutputReadLine.StandardOutput Danach signalisiert das OutputDataReceived Ereignis jedes Mal, wenn der Prozess eine Zeile in den umgeleiteten StandardOutput Stream schreibt, bis der Prozess beendet oder aufruft CancelOutputRead.
Hinweis
Die Anwendung, die die asynchrone Ausgabe verarbeitet, sollte die WaitForExit -Methode aufrufen, um sicherzustellen, dass der Ausgabepuffer geleert wurde.