process.diagnostic等待用户输入

时间:2012-01-23 21:03:04

标签: c# multithreading process user-input

我有一个简单的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是否已更改?在一个单独的线程中,如何做到这一点?

我希望有人可以对这个问题有所了解。 提前谢谢。

1 个答案:

答案 0 :(得分:-1)

在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();