c# - 我的进程在等待输入吗?

标签 c# .net system.diagnostics

我正在使用 Process 类来运行 exe。

exe 是我无法控制的第 3 方控制台应用程序。

我想知道进程是否在等待命令行输入。

如果它有什么不同,我打算在应用程序等待输入时终止它。

当程序有输出等待读取时有合适的事件,但当进程耐心等待输入时我看不到任何类似的事件。

            ProcessStartInfo info = new ProcessStartInfo();
            info.FileName = "myapp.exe";
            info.CreateNoWindow = true;
            info.UseShellExecute = false;
            info.RedirectStandardError = true;
            info.RedirectStandardInput = true;
            info.RedirectStandardOutput = true;
            process.StartInfo = info;

            process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
            process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);

            process.Start();

            process.BeginOutputReadLine();
            process.BeginErrorReadLine();


            process.WaitForExit();

如何检测我的进程正在等待输入?

最佳答案

根据第 3 方进程正在做什么,您可以尝试轮询其线程的状态:

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

如果不行...你可以试试

process.StandardInput.Close();

在调用 Start() 之后,我推测如果子进程试图从标准输入中读取,将会引发异常。

关于c# - 我的进程在等待输入吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17799685/

相关文章:

c# - 在接收到新行之前读取 Process StandardOutput

c# - 系统.诊断.进程(); StartInfo.Arguments 使用环境变量作为参数

c# - 将 C# Double 格式化为科学记数法的三倍数

c# - 如果超时没有完成任务,Task.Wait(int) 是否会停止任务?

c# - EF - SqlQuery - 数据读取器中没有相应的同名列

c# - 为什么在 Visual Studio 2010 中保存 xml 文件非常慢?

c# - 查询事件日志时如何创建EventBookmark

c# - RDLC 报告未在 IE 11 中显示

c# - 处理双工 WCF 服务中的客户端断开连接

c# - 如何绕过有关已删除目录的字符路径限制的 TFS 错误? ( Visual Studio 2013)