process.diagnostic ожидает ввода пользователя - PullRequest
1 голос
/ 24 января 2012

У меня есть простое приложение 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 голосов
/ 25 января 2013

В приложении 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...