首页 > 解决方案 > 从控制台窗口异步读取文本时,需要刷新

问题描述

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

我使用了这里的代码。

一切正常。来自目标 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()了计时器,但没有。如何解决这个问题?

标签: c#asynchronousprocess

解决方案


推荐阅读