zoukankan      html  css  js  c++  java
  • C#输入输出重定向 方法二:异步process

    使用事件和委托,进程有2个事件OutputDataReceived、ErrorDataReceived可用于重定向标准输出和标准错误输出;

    需要注意的是InputDataReceived并不是process的事件,所以标准输入并不可以如此重定向;

    使用前需加上:   using System.Diagnostics;  //可使用process

    第一步:确定必要成分

    1 Process StartInfostartInfo =newProcessStartInfo(.exe);
    2 startInfo.CreateNoWindow = true;   //不创建窗口
    3 startInfo.UseShellExecute = false;
    4 //不使用系统外壳程序启动,重定向输出的话必须设为false
    5 startInfo.RedirectStandardOutput = true; //重定向输出,
    6 startInfo.RedirectStandardError = true;

    第二步:使用try catch块

     1  try
     2 {
     3   Processprocess = Process.Start(startInfo);
     4   process.OutputDataReceived += (s, _e)=> Console.WriteLine(_e.Data);
     5   process.ErrorDataReceived += (s, _e) =>Console.WriteLine(_e.Data);
     6   //当EnableRaisingEvents为true,进程退出时Process会调用下面的委托函数
     7   process.Exited += (s, _e) => Console.WriteLine("Exited with " + _process.ExitCode);
     8   process.EnableRaisingEvents = true;
     9   process.BeginOutputReadLine();
    10   process.BeginErrorReadLine();
    11   process.WaitForExit();
    12 }
    13 catch (Exception e)
    14 {
    15   Console.WriteLine(ex.Message);
    16 }

    需要注意的是,不能对同一个重定向流混合使用异步和同步读取操作。

    在异步或同步模式下打开 Process 的重定向流后,对该流的所有进一步的读取操作都必须在同一模式下进行。

    例如,不要对StandardOutput 流调用BeginOutputReadLine 后接着调用ReadLine,反之亦然。

    但是,可以在不同的模式下读取两个不同的流。例如,可以先调用BeginOutputReadLine,然后再为StandardError 流调用 ReadLine

  • 相关阅读:
    java学习day35-三大框架-MyBatis(一)
    java学习day35-数据库事务
    java学习day34-Cookie和Session的区别
    java学习day34-Session技术
    Hadoop Java Versions
    如何下载和安装预构建的OpenJDK软件包
    How to install and configure samba on RHEL 8 / CentOS 8
    Win10系统下安装的Office版本的说明和注意事项
    Apache Hadoop
    nmap常用命令整理(长期更新)
  • 原文地址:https://www.cnblogs.com/Elson8080/p/4424461.html
Copyright © 2011-2022 走看看