如何知道线程等待输入

时间:2015-10-19 08:35:19

标签: c# multithreading process

我正在运行cmd.exe作为进程并启用其输入和输出重定向并为 inputreceived outputreceived 事件创建线程。 如何在执行进程时找到线程或进程等待输入

2 个答案:

答案 0 :(得分:2)

你不是。你有输入流和输出流 - 它就是它。没有"等待输入" flag - 这只是为了方便用户,而不是API的一部分。

当您运行某个流程时,系统会假设您知道如何与其进行交互 - 您不必等待该流程告诉您提供输入。只需发送数据而无需等待"等待输入"。

例如,如果您知道该过程想要使用三个不同的ReadLine来阅读,请发送

One
Two
Three

ReadLine对于数据来说并不是请求 - 只需等待输入流中存在足够的数据。如果已经有足够的数据(即输入流具有\r\n),则立即返回。现在,从技术上讲,这确实使线程处于等待状态,但这对您没有多大帮助 - 您不知道哪个线程,并且您不知道原因等待状态 - 也可能是尝试读取文件或其他内容。

答案 1 :(得分:1)

如果不知道正在运行的流程是什么,就无法做到这一点。

例如,如果您知道进程执行操作然后打印结果,则可以实施将操作发送到进程'输入流并等待进程完成(打印消息)到输出流。

您可以尝试使用以下内容来汇集流程的主题:

foreach (ProcessThread thread in process.Threads)
    if (thread.ThreadState == ThreadState.Wait
        && thread.WaitReason == ThreadWaitReason.UserRequest)
        ...