Process.OutputDataReceived Událost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vyvolá se pokaždé, když aplikace zapíše řádek do svého přesměrovaného datového StandardOutput proudu.
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
Event Type
- Atributy
Příklady
Následující příklad ukazuje, jak provádět asynchronní operace čtení na přesměrovaný StandardOutput datový proud ipconfig
příkazu.
Příklad vytvoří delegáta události pro obslužnou rutinu OutputHandler
události a přidruží ji k OutputDataReceived události. Obslužná rutina události přijme řádky textu z přesměrovaného StandardOutput datového proudu, zformátuje text a uloží ho do výstupního řetězce, který se později zobrazí v okně konzoly příkladu.
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
Poznámky
Událost OutputDataReceived označuje, že přidružený Process uživatel zapíše do přesměrovaného datového proudu řádek, který je ukončený novým řádkem (návrat na začátek řádku (CR), odřádkování StandardOutput (LF) nebo CR+LF.
Událost je povolena během asynchronních operací čtení v systému StandardOutput. Pokud chcete spustit asynchronní operace čtení, musíte přesměrovat StandardOutput stream objektu , přidat obslužnou Processrutinu OutputDataReceived události do události a volat BeginOutputReadLine. Poté událost signalizuje pokaždé, OutputDataReceived když proces zapíše řádek do přesměrovaného StandardOutput datového proudu, dokud se proces ukončí nebo nezavolá CancelOutputRead.
Poznámka
Aplikace, která zpracovává asynchronní výstup, by měla volat metodu WaitForExit , aby se zajistilo, že výstupní vyrovnávací paměť byla vyprázdněna.