我正在运行cmd.exe作为进程并启用其输入和输出重定向并为 inputreceived 和 outputreceived 事件创建线程。 如何在执行进程时找到线程或进程等待输入?
答案 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)
...