从控制台窗口异步读取文本时,需要刷新

时间:2019-01-01 11:29:24

标签: c# asynchronous process

我正在使用C#启动cmd工具,并在文本框中异步显示其输出。

我使用了代码from here

一切正常。来自目标cmd工具的启动消息和停止消息将插入到文本框中。但是有一个小问题。

目标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(),但是什么也没有。如何解决这个问题?

0 个答案:

没有答案