如何知道线程等待输入

本文关键字:输入 等待 线程 何知道 | 更新日期: 2023-09-27 18:18:21

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

如何知道线程等待输入

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

当您运行一个进程时,假定您知道如何与它交互——您不必等待进程告诉您提供输入。直接发送数据,不用等待"waiting for input"。

例如,如果您知道进程想要使用三个不同的ReadLine进行读取,只需发送

One
Two
Three

ReadLine并不是真正的请求数据——它只是等待,直到输入流中有足够的数据。如果已经有足够的数据(也就是说,输入流有一个'r'n),它立即返回。现在,从技术上讲,这确实使线程处于等待状态,但这对您没有多大帮助-您不知道是哪个线程,也不知道等待状态的原因 -它可能正在尝试读取文件或其他东西。

如果不知道正在运行的进程是做什么的,就不能这样做。

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

您可以尝试使用以下命令来池化进程的线程:

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