C# 如何在后台启动进程并读取标准输出
我是C#新手,我必须从我的C#程序开始一个非常耗时的过程,当然不必承担ui冻结的损失,我还想在cmd中读取程序打印的输出,最后我想要一个停止按钮,这样我可以随时关闭程序 请帮助..尝试:C# 如何在后台启动进程并读取标准输出,c#,multiprocessing,C#,Multiprocessing,我是C#新手,我必须从我的C#程序开始一个非常耗时的过程,当然不必承担ui冻结的损失,我还想在cmd中读取程序打印的输出,最后我想要一个停止按钮,这样我可以随时关闭程序 请帮助..尝试: using System.Diagnostics; void startProcess() { Process p = new Process(); p.StartInfo.FileName = "FileName"; p.StartInfo.WindowSty
using System.Diagnostics;
void startProcess()
{
Process p = new Process();
p.StartInfo.FileName = "FileName";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.Start();
var output = p.StandardOutput.ReadToEnd();
}
MethodInvoker starter = new MethodInvoker(startProcess);
starter.BeginInvoke(null, null);
要结束该过程,请执行以下操作:
p.close()
使用类似以下内容:
void StartProcess(){
Process p = new Process();
p.StartInfo.FileName = "yourfile.exe";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
var readingThread = new System.Threading.Thread(() => {
while (!p.StandardOutput.EndOfStream){
Console.WriteLine(p.StandartOutput.ReadLine());
System.Threading.Thread.Sleep(1);
}
}
readingThread.Start();
}
看看:。也可以使用process.kill()终止进程,但它们都在主ui线程上。我必须运行一个非常耗时的进程,它会冻结ui…进程本身会获得一个新线程,但从输出读取会阻塞主线程。要使其异步,您可以启动一个新线程,从进程Stdout读取数据,或者使用StreamReader.ReadToEndAsync或StreamReader.ReadLineAsync方法。我是noob。您可以共享一些相关链接吗?此网站上有数百个重复的此问题。你试过执行最小搜索吗?这是在主ui线程上,它会冻结ui…我不知道太多我是noobOkk我会尝试。ThnksCan请解释为什么要使用system.threading.sleep?如果不使用它,该程序会占用大量CPU资源(高达50%)。通过增加一毫秒的睡眠,它不会占用这么多资源。好的,我会试试看