引用
BeginErrorReadLine 可同步或异步读取 StandardError 流。Read、ReadLine 和 ReadToEnd 等方法对进程的错误输出流执行同步读取操作。这些同步读取操作只有在关联的 Process写入其 StandardError 流或关闭该流后才能完成。相反,BeginErrorReadLine 在 StandardError 流上开始异步读取操作。此方法会为流输出启用指定的事件处理程序并立即返回到调用方,这样当流输出被定向到该事件处理程序时,调用方还可以执行其他操作。按照这些步骤对 Process 的 StandardError 执行异步读取操作: 将 UseShellExecute 设置为 false。 将 RedirectStandardError 设置为 true。 向 ErrorDataReceived 事件添加事件处理程序。事件处理程序必须与 System.Diagnostics.DataReceivedEventHandler 委托签名相匹配。 启动 Process。 调用 Process 的 BeginErrorReadLine。此调用将启动 StandardError 上的异步读取操作。 启动异步读取操作时,关联的 Process 每向其 StandardError 流写入一行文本时,都将调用该事件处理程序。可通过调用 CancelErrorRead取消异步读取操作。可通过调用方或事件处理程序取消读取操作。取消之后,可以再次调用 BeginErrorReadLine 继续进行异步读取操作。 ErrorDataReceived 事件指示关联的进程已写入其重定向 StandardError 流中。该事件仅在对 StandardError 进行异步读取操作期间发生。若要启动异步读取操作,必须重定向 Process 的 StandardError 流,向 ErrorDataReceived 事件添加事件处理程序,并调用 BeginErrorReadLine。之后,每当该进程向重定向 StandardError 流中写入一行时,ErrorDataReceived 事件都会发出信号,直到该进程退出或调用 CancelErrorRead为止。
同步读取输出信息的代码...
引用
StandardError 可以同步或异步读取重定向的 StandardError 流。Read、ReadLine 和 ReadToEnd 等方法对进程的错误输出流执行同步读取操作。这些同步读取操作只有在关联的 Process 写入其 StandardError 流或关闭该流后才能完成。相反,BeginErrorReadLine 在 StandardError 流上开始异步读取操作。此方法为流输出启用一个指定的事件处理程序并立即返回到调用方,这样当流输出被定向到该事件处理程序时,调用方可以执行其他操作。同步读取操作在读取 StandardError 流的调用方及写入该流中的子进程之间引入一个依赖项。这些依赖项可能导致产生死锁情况。调用方读取子进程的重定向流时依赖于该子进程。调用方将等待读取操作,直到子进程写入流或关闭流为止。子进程写入足够多的数据以填充重定向流的时间依赖于父进程。子进程将等待下一次写操作,直到父进程读取了全部流或关闭该流为止。当调用方和子进程相互等待对方完成操作时,就会产生死锁情况,使双方都无法继续执行操作。您可以通过计算调用方和子进程之间的依赖项从而避免出现死锁情况。
我在.NET 2.0中用这些代码,调用FFMPEG很方便...
至于同步还是异步...我会选择异步的...因为异步很方便,有信息就会自动输出...输出的信息还可以经过特定的处理代码,把进度等信息显示出来...至于代码怎么写,无非就是文本处理操作...什么indexof,substring或者正则表达式之类的...
这只是代码模型而已,可以引申出更高级的处理类,例如多线程调用,多线程并发处理,自动搜索数据库里没转换的内容转换,根据列表转换等...
作者:gdgzboy@牛C网
地址:http://www.niuc.net/post/10/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
牛C网推荐您再看看以下日志:
教你轻松掌握SQL Server的数据同步技术
无废话C#设计模式之三-Abstract Factory
.NET Socket开发中的异步Socket
用C#开发智能手机软件-推箱子(一)
C#中实现VB中的CreateObject方法
C#取数据库名称与数据库中表名的方法
C#中提供的VB不支持的新特性
C#编程技巧 轻松实现对文件的操作
C#提交数据到服务器并返回的处理
《Effective C#》-区别四个判等函数
教你轻松掌握SQL Server的数据同步技术
无废话C#设计模式之三-Abstract Factory
.NET Socket开发中的异步Socket
用C#开发智能手机软件-推箱子(一)
C#中实现VB中的CreateObject方法
C#取数据库名称与数据库中表名的方法
C#中提供的VB不支持的新特性
C#编程技巧 轻松实现对文件的操作
C#提交数据到服务器并返回的处理
《Effective C#》-区别四个判等函数
ASP.Net中保护自定义的服务器控件
C#开发的Mofile采集程序





