При асинхронном чтении текста из окна консоли требуется обновление - PullRequest
0 голосов
/ 01 января 2019

Я запускаю инструмент cmd с использованием C # и показываю его вывод в асинхронном режиме в текстовом поле.

Здесь я использовал коды .

Все работает нормально.Начальное сообщение и остановка сообщения от целевого инструмента cmd вставят в текстовое поле.Но есть небольшая проблема.

У инструмента Target cmd есть индикатор выполнения, но он не будет отображаться, пока пользователь не нажмет клавишу внутри инструмента во время его работы, тогда пользователь может увидеть, например, 50%, если снова нажать клавишу, он увидит70% до конца.

Я пытался установить таймер и отправить ключ этому процессу, используя дескриптор процесса, но не получил желаемый результат:

private void Button1_Click(object sender, EventArgs e)
{
    process = new ProcessWrapper("C:\\Program Files (x86)\\CmdTool.exe", "someArgs");
    process.OutputDataReceived += (senderz, eventArgs) => SetText($"{textBox1.Text}" + $"{eventArgs.Data}" + Environment.NewLine);
    process.Start();
    processHandle = process.Handle;

    System.Timers.Timer aTimer = new System.Timers.Timer();
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    aTimer.Interval = 5000;
    aTimer.Enabled = true;
}

private void OnTimedEvent(object source, ElapsedEventArgs e)
{
    if (!process.HasExited)
    {
        SetForegroundWindow(processHandle);
        SendKeys.SendWait("k");
    }
}

Я дажепробовал Process.Refresh() на таймере, но ничего.Как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...