DataReceivedEventArgs 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供有关 OutputDataReceived 和 ErrorDataReceived 事件的数据。
public ref class DataReceivedEventArgs : EventArgs
public class DataReceivedEventArgs : EventArgs
type DataReceivedEventArgs = class
inherit EventArgs
Public Class DataReceivedEventArgs
Inherits EventArgs
- 继承
示例
下面的代码示例演示如何对命令的重定向 StandardOutput 流 sort
执行异步读取操作。 命令 sort
是一个控制台应用程序,用于读取和排序文本输入。
该示例为 SortOutputHandler
事件处理程序创建一个事件委托,并将其与 OutputDataReceived 事件相关联。 事件处理程序从重定向 StandardOutput 的流接收文本行,设置文本的格式,并将文本写入屏幕。
// Define the namespaces used by this sample.
#using <System.dll>
using namespace System;
using namespace System::Text;
using namespace System::IO;
using namespace System::Diagnostics;
using namespace System::Threading;
using namespace System::ComponentModel;
ref class SortOutputRedirection
{
private:
// Define static variables shared by class methods.
static StringBuilder^ sortOutput = nullptr;
static int numOutputLines = 0;
public:
static void SortInputListText()
{
// Initialize the process and its StartInfo properties.
// The sort command is a console application that
// reads and sorts text input.
Process^ sortProcess;
sortProcess = gcnew Process;
sortProcess->StartInfo->FileName = "Sort.exe";
// Set UseShellExecute to false for redirection.
sortProcess->StartInfo->UseShellExecute = false;
// Redirect the standard output of the sort command.
// This stream is read asynchronously using an event handler.
sortProcess->StartInfo->RedirectStandardOutput = true;
sortOutput = gcnew StringBuilder;
// Set our event handler to asynchronously read the sort output.
sortProcess->OutputDataReceived += gcnew DataReceivedEventHandler( SortOutputHandler );
// Redirect standard input as well. This stream
// is used synchronously.
sortProcess->StartInfo->RedirectStandardInput = true;
// Start the process.
sortProcess->Start();
// Use a stream writer to synchronously write the sort input.
StreamWriter^ sortStreamWriter = sortProcess->StandardInput;
// Start the asynchronous read of the sort output stream.
sortProcess->BeginOutputReadLine();
// Prompt the user for input text lines. Write each
// line to the redirected input stream of the sort command.
Console::WriteLine( "Ready to sort up to 50 lines of text" );
String^ inputText;
int numInputLines = 0;
do
{
Console::WriteLine( "Enter a text line (or press the Enter key to stop):" );
inputText = Console::ReadLine();
if ( !String::IsNullOrEmpty( inputText ) )
{
numInputLines++;
sortStreamWriter->WriteLine( inputText );
}
}
while ( !String::IsNullOrEmpty( inputText ) && (numInputLines < 50) );
Console::WriteLine( "<end of input stream>" );
Console::WriteLine();
// End the input stream to the sort command.
sortStreamWriter->Close();
// Wait for the sort process to write the sorted text lines.
sortProcess->WaitForExit();
if ( numOutputLines > 0 )
{
// Write the formatted and sorted output to the console.
Console::WriteLine( " Sort results = {0} sorted text line(s) ",
numOutputLines.ToString() );
Console::WriteLine( "----------" );
Console::WriteLine( sortOutput->ToString() );
}
else
{
Console::WriteLine( " No input lines were sorted." );
}
sortProcess->Close();
}
private:
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->AppendFormat( "\n[{0}] {1}",
numOutputLines.ToString(), outLine->Data );
}
}
};
/// The main entry point for the application.
void main()
{
try
{
SortOutputRedirection::SortInputListText();
}
catch ( InvalidOperationException^ e )
{
Console::WriteLine( "Exception:" );
Console::WriteLine( e );
}
}
// Define the namespaces used by this sample.
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.ComponentModel;
namespace ProcessAsyncStreamSamples
{
class SortOutputRedirection
{
// Define static variables shared by class methods.
private static StringBuilder sortOutput = null;
private static int numOutputLines = 0;
public static void SortInputListText()
{
// Initialize the process and its StartInfo properties.
// The sort command is a console application that
// reads and sorts text input.
Process sortProcess = new Process();
sortProcess.StartInfo.FileName = "Sort.exe";
// Set UseShellExecute to false for redirection.
sortProcess.StartInfo.UseShellExecute = false;
// Redirect the standard output of the sort command.
// This stream is read asynchronously using an event handler.
sortProcess.StartInfo.RedirectStandardOutput = true;
sortOutput = new StringBuilder();
// Set our event handler to asynchronously read the sort output.
sortProcess.OutputDataReceived += SortOutputHandler;
// Redirect standard input as well. This stream
// is used synchronously.
sortProcess.StartInfo.RedirectStandardInput = true;
// Start the process.
sortProcess.Start();
// Use a stream writer to synchronously write the sort input.
StreamWriter sortStreamWriter = sortProcess.StandardInput;
// Start the asynchronous read of the sort output stream.
sortProcess.BeginOutputReadLine();
// Prompt the user for input text lines. Write each
// line to the redirected input stream of the sort command.
Console.WriteLine("Ready to sort up to 50 lines of text");
String inputText;
int numInputLines = 0;
do
{
Console.WriteLine("Enter a text line (or press the Enter key to stop):");
inputText = Console.ReadLine();
if (!String.IsNullOrEmpty(inputText))
{
numInputLines++;
sortStreamWriter.WriteLine(inputText);
}
}
while (!String.IsNullOrEmpty(inputText) && (numInputLines < 50));
Console.WriteLine("<end of input stream>");
Console.WriteLine();
// End the input stream to the sort command.
sortStreamWriter.Close();
// Wait for the sort process to write the sorted text lines.
sortProcess.WaitForExit();
if (numOutputLines > 0)
{
// Write the formatted and sorted output to the console.
Console.WriteLine($" Sort results = {numOutputLines} sorted text line(s) ");
Console.WriteLine("----------");
Console.WriteLine(sortOutput);
}
else
{
Console.WriteLine(" No input lines were sorted.");
}
sortProcess.Close();
}
private 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}");
}
}
}
}
namespace ProcessAsyncStreamSamples
{
class ProcessSampleMain
{
/// The main entry point for the application.
static void Main()
{
try
{
SortOutputRedirection.SortInputListText();
}
catch (InvalidOperationException e)
{
Console.WriteLine("Exception:");
Console.WriteLine(e);
}
}
}
}
' Define the namespaces used by this sample.
Imports System.Text
Imports System.IO
Imports System.Diagnostics
Imports System.Threading
Imports System.ComponentModel
Namespace ProcessAsyncStreamSamples
Class ProcessAsyncOutputRedirection
' Define static variables shared by class methods.
Private Shared sortOutput As StringBuilder = Nothing
Private Shared numOutputLines As Integer = 0
Public Shared Sub SortInputListText()
' Initialize the process and its StartInfo properties.
' The sort command is a console application that
' reads and sorts text input.
Dim sortProcess As New Process()
sortProcess.StartInfo.FileName = "Sort.exe"
' Set UseShellExecute to false for redirection.
sortProcess.StartInfo.UseShellExecute = False
' Redirect the standard output of the sort command.
' Read the stream asynchronously using an event handler.
sortProcess.StartInfo.RedirectStandardOutput = True
sortOutput = New StringBuilder()
' Set our event handler to asynchronously read the sort output.
AddHandler sortProcess.OutputDataReceived, AddressOf SortOutputHandler
' Redirect standard input as well. This stream
' is used synchronously.
sortProcess.StartInfo.RedirectStandardInput = True
' Start the process.
sortProcess.Start()
' Use a stream writer to synchronously write the sort input.
Dim sortStreamWriter As StreamWriter = sortProcess.StandardInput
' Start the asynchronous read of the sort output stream.
sortProcess.BeginOutputReadLine()
' Prompt the user for input text lines. Write each
' line to the redirected input stream of the sort command.
Console.WriteLine("Ready to sort up to 50 lines of text")
Dim inputText As String
Dim numInputLines As Integer = 0
Do
Console.WriteLine("Enter a text line (or press the Enter key to stop):")
inputText = Console.ReadLine()
If Not String.IsNullOrEmpty(inputText) Then
numInputLines += 1
sortStreamWriter.WriteLine(inputText)
End If
Loop While Not String.IsNullOrEmpty(inputText) AndAlso numInputLines < 50
Console.WriteLine("<end of input stream>")
Console.WriteLine()
' End the input stream to the sort command.
sortStreamWriter.Close()
' Wait for the sort process to write the sorted text lines.
sortProcess.WaitForExit()
If Not String.IsNullOrEmpty(numOutputLines) Then
' Write the formatted and sorted output to the console.
Console.WriteLine($" Sort results = {numOutputLines} sorted text line(s) ")
Console.WriteLine("----------")
Console.WriteLine(sortOutput)
Else
Console.WriteLine(" No input lines were sorted.")
End If
sortProcess.Close()
End Sub
Private Shared Sub SortOutputHandler(sendingProcess As Object,
outLine As DataReceivedEventArgs)
' Collect the sort command output.
If Not String.IsNullOrEmpty(outLine.Data) Then
numOutputLines += 1
' Add the text to the collected output.
sortOutput.Append(Environment.NewLine +
$"[{numOutputLines}] - {outLine.Data}")
End If
End Sub
End Class
End Namespace
Namespace ProcessAsyncStreamSamples
Class ProcessSampleMain
' The main entry point for the application.
Shared Sub Main()
Try
ProcessAsyncOutputRedirection.SortInputListText()
Catch e As InvalidOperationException
Console.WriteLine("Exception:")
Console.WriteLine(e)
End Try
End Sub
End Class 'ProcessSampleMain
End Namespace 'Process_AsyncStream_Sample
注解
若要异步收集进程的重定向 StandardOutput 或 StandardError 流输出,必须创建处理重定向的流输出事件的方法。 当进程写入重定向的流时,将调用事件处理程序方法。 事件委托使用 实例 DataReceivedEventArgs调用事件处理程序。 属性 Data 包含进程写入重定向流的文本行。
属性
Data |
获取写入到重定向 Process 输出流的字符行。 |
方法
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |