• DataReceivedEventHandler 委托


    代码
    // 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;
    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 += new 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);
    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.ToString() + "] - " + outLine.Data);
    }
    }
    }
    }
  • 相关阅读:
    SpringCloud
    Linux
    SpringBoot
    秒杀系统设计
    设计模式
    数据库(mysql)
    Java web
    c#常用控件及简写
    C#常用的form窗体属性(最大化、最小化、窗体居中)
    C#中使用IndexOf()判断字符串在字符串数组中第一次出现的索引位置
  • 原文地址:https://www.cnblogs.com/zpino/p/1866230.html
Copyright © 2020-2023  润新知