使用async更新Process(在其他线程上)的gui

时间:2016-05-25 04:52:53

标签: c# process async-await windows-forms-designer system.diagnostics

方法Process.BeginOutputReadLine()在GUI的线程以外的线程上异步读取输出。我试图找到一种方法来使用异步并等待我的C#代码。

     p = new Process();
     p.StartInfo.UseShellExecute = false;
     p.StartInfo.CreateNoWindow = true;
     p.StartInfo.RedirectStandardOutput = true;
     p.StartInfo.FileName = "mplayer.exe";
     p.StartInfo.Arguments = @"C:\movie.mp4";
     p.OutputDataReceived += P_OutputDataReceived;
     p.Start();

有没有办法在Process类中使用异步方法进行更新?

1 个答案:

答案 0 :(得分:1)

并非.net中的所有异步方法都可以立即与async和await一起使用。多年来,框架中引入了不同的异步模式。使用不同的模式实现了框架的不同部分。在这里查看不同模式的描述: https://msdn.microsoft.com/en-us/library/jj152938(v=vs.110).aspx

在您的情况下,接口实现为基于事件的异步模式(EAP),因为有一个事件处理程序和一个要启动的方法。

这里有一篇好文章:https://msdn.microsoft.com/en-us/library/hh873178(v=vs.110).aspx讨论了异步模式之间的互操作,并讨论了您正在寻找的内容。

但是,你不需要进入它,你可以使用p.StandardOutput.ReadAsync这是一个等待的方法,它将读取OutputDataReceived将读取的相同输出流。