1

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

4

2 回答 2

2

在你的线程之间使用同步!

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

通常,您的主线程将等待 AutoResetEvent,一旦工作完成,它将由工作线程触发。

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

于 2009-04-01T12:10:44.353 回答
1

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

于 2009-04-01T12:12:07.063 回答