我有一个简单的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
是否已更改?在一个单独的线程中,如何做到这一点?
我希望有人可以对这个问题有所了解。 提前谢谢。
答案 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();