process.diagnostic正在等待用户输入

本文关键字:用户 输入 在等待 diagnostic process | 更新日期: 2023-09-27 18:21:16

我有一个简单的WPF应用程序,它可以与另一个控制台程序通信。我使用Process.Diagnostic来启动控制台应用程序。控制台应用程序有一个提示,所以我可以通过StandardInput发送输入,并通过StandardOutput读取结果。我只想在WPF应用程序加载并继续发送输入和读取输出时启动控制台应用程序一次(使其始终保持活动状态)。

我有一些代码,但我不知道如何把它们放在一起。

问题是,在发送输入后,我想等到提示出现后,再开始逐行读取输出,这样我就有了完整的结果。我知道我可以检查流程是否正在等待这样的输入:

foreach (ProcessThread thread in _proccess.Threads)
{
    if (thread.ThreadState == System.Diagnostics.ThreadState.Wait
        && thread.WaitReason == ThreadWaitReason.UserRequest)
    {
        _isPrompt = true;
    }
}

但是,我应该把代码放在哪里来检查ThreadState是否已经更改?在一个单独的线程中,如何做到这一点?

我希望有人能澄清这个问题。提前谢谢。

process.diagnostic正在等待用户输入

在WPF应用程序中,您可以使用System.Windows.Threading.DispatcherTimer.

改编自MSDN文档的示例:

// code assumes dispatcherTimer, _process and _isPrompt are declared on the WFP form
this.dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
this.dispatcherTimer.Tick += (sender, e) =>
{
    this._isPrompt = proc
        .Threads
        .Cast<ProcessThread>()
        .Any(t => t.WaitReason == ThreadWaitReason.UserRequest);
};
this.dispatcherTimer.Interval = TimeSpan.FromSeconds(1);
this.dispatcherTimer.Start();
...
this._process.Start();