进程已退出但缓冲区仍在打印中,c#

时间:2009-04-01 12:04:44

标签: c# process standards

我在C#中创建了一个执行外部程序的进程,我使用异步方法读取标准输出,并且一切正常。但是我有一个问题,我打印一行表明过程已经完成。问题是,有时候当缓冲区中的数据很大时可能会发生这种情况,进程可能会退出,但是当打印发生在其他线程上时,它可能仍在打印数据。因此,在打印整个输出之前显示指示过程已终止的信息。 .NET中是否提供了解决此类问题的任何内容?因为我正在进行异步调用所以我无法访问process.standardoutput值,因为它引发了冲突。我该怎么办?

2 个答案:

答案 0 :(得分:2)

在线程之间使用同步!

您应该查看AutoResetEvents,它完全适合您的场景(即线程想要通知另一个事件发生的事件 - 在您的例子中,缓冲区读取已结束)

通常,您的主线程将等待AutoResetEvent,一旦工作完成,它将由工作人员发出脉冲。

在这种特定情况下(即等待线程完成),您还可以使用Thread.Join,这将阻止您的主线程,直到您的工作线程被终止

答案 1 :(得分:1)

如果在异步委托上调用EndInvoke,则线程应该阻塞,直到操作完成。