c# - 从控制台窗口异步读取文本时,需要刷新
问题描述
我正在使用 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()
了计时器,但没有。如何解决这个问题?
解决方案
推荐阅读
- android - Android 发布签名的 APK:从输出 logcat 中删除 Firebase Analytics 日志
- javascript - 使用 JavaScript 批准 HTML POST 表单中的密码长度
- laravel - Laravel Mix & Vue:如何获得多个 CSS 输出?
- python - 如何只在一列上对其他列进行总结,而对熊猫的其余部分不做任何事情?
- java - java中电影名称的字符串过滤
- amazon-web-services - 将数据从 HDFS 复制到 S3 时,“使用 AWS KMS 托管密钥指定服务器端加密的请求需要 AWS 签名版本 4”
- c++ - 取消引用指向 cv::Mat 的“cv::Mat*”指针以接收 Gstreamer 视频并在 OpenCV 中使用
- c++ - C++ 阻塞队列线程
- html - 如何在不设置父级默认高度的情况下添加包围绝对定位子级的轮廓
- python - Python 可以遍历元组列表并仅选择与某个字符串匹配的元组吗?