韩国优秀网站,织梦后台怎么建设网站,wordpress 安装 godaddy在哪里 上传的根目录,企业电子商务网站的建设阶段当 Process 将文本写入其标准流中时#xff0c;通常将在控制台上显示该文本。通过重定向 StandardOutput 流#xff0c;可以操作或取消进程的输出。例如#xff0c;可以筛选文本、用不同方式将其格式化#xff0c;也可以将输出同时写入控制台和指定的日志文件中。有两种方式…当 Process 将文本写入其标准流中时通常将在控制台上显示该文本。通过重定向 StandardOutput 流可以操作或取消进程的输出。例如可以筛选文本、用不同方式将其格式化也可以将输出同时写入控制台和指定的日志文件中。有两种方式同步、异步。1. 先说同步方法这种方法网上有很多例子废话少说贴上代码大家一看就明白了Process process new Process();process.StartInfo.FileName cmd.exe;process.StartInfo.UseShellExecute false; // 是否使用外壳程序 process.StartInfo.CreateNoWindow true; //是否在新窗口中启动该进程的值 process.StartInfo.RedirectStandardInput true; // 重定向输入流 //process.StartInfo.RedirectStandardOutput true; //重定向输出流 //process.StartInfo.RedirectStandardError true; //重定向错误流 string strCmd ping www.163.com /r/n;strCmd exit;process.Start();process.StandardInput.WriteLine(strCmd);string output process.StandardOutput.ReadToEnd();//获取输出信息 process.WaitForExit();int n process.ExitCode; // n 为进程执行返回值 process.Close();
可以同步或异步读取重定向的 StandardOutput 流。Read、ReadLine 和 ReadToEnd 等方法对进程的输出流执行同步读取操作。这些同步读取操作只有在关联的 Process 写入其StandardOutput 流或关闭该流后才能完成。
同步读取操作在读取 StandardOutput 流的调用方及写入该流中的子进程之间引入一个依赖项。这些依赖项可能导致产生死锁情况。调用方读取子进程的重定向流时依赖于该子进程。调用方将等待读取操作直到子进程写入流或关闭流为止。子进程写入足够多的数据以填充重定向流的时间依赖于父进程。子进程将等待下一次写操作直到父进程读取了全部流或关闭该流为止。当调用方和子进程相互等待对方完成操作时就会产生死锁情况使双方都无法继续执行操作。可以通过计算调用方和子进程之间的依赖项从而避免出现死锁情况。
2. 再来说一下异步方法
使用事件和委托进程有2个事件OutputDataReceived、OutputDataReceived。我们可以注册这2个事件使该进程在往Output和error流中填充数据时调用相应的事件响应函数及时处理流中数据从而避免流被填满而发生的死锁情况在WaitForExit之前调用BeginOutputReadLine 或者BeginErrorReadLine 开始异步读取。此方法会为流输出启用一个指定的事件处理程序并立即返回到调用方这样当流输出被定向到该事件处理程序时调用方还可以执行其他操作。
注意若要使用 StandardOutput必须将 ProcessStartInfo.UseShellExecute 设置为 false并且将 ProcessStartInfo.RedirectStandardOutput 设置为 true。否则读取StandardOutput 流时将引发异常。// using System.Diagnostics;// 运行新进程ProcessStartInfo startInfo new ProcessStartInfo(exeName);startInfo.CreateNoWindow true; //不创建窗口startInfo.UseShellExecute false;//不使用系统外壳程序启动,重定向输出的话必须设为falsestartInfo.RedirectStandardOutput true; //重定向输出而不是默认的显示在dos控制台上startInfo.RedirectStandardError true;try{Process process Process.Start(startInfo);process.OutputDataReceived (s, _e) Console.WriteLine(_e.Data);process.ErrorDataReceived (s, _e) Console.WriteLine(_e.Data);//当EnableRaisingEvents为true进程退出时Process会调用下面的委托函数process.Exited (s, _e) Console.WriteLine(Exited with _process.ExitCode);process.EnableRaisingEvents true;process.BeginOutputReadLine();process.BeginErrorReadLine();process.WaitForExit();}catch (Exception e){Console.WriteLine(ex.Message);
}3. 注意事项
不能对同一个重定向流混合使用异步和同步读取操作。在异步或同步模式下打开 Process 的重定向流后对该流的所有进一步的读取操作都必须在同一模式下进行。例如不要对StandardOutput 流调用BeginOutputReadLine 后接着调用ReadLine反之亦然。但是可以在不同的模式下读取两个不同的流。例如可以先调用BeginOutputReadLine然后再为StandardError 流调用 ReadLine。