C# 如何在后台启动进程并读取标准输出

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

我是C#新手,我必须从我的C#程序开始一个非常耗时的过程,当然不必承担ui冻结的损失,我还想在cmd中读取程序打印的输出,最后我想要一个停止按钮,这样我可以随时关闭程序

请帮助..

尝试:

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%)。通过增加一毫秒的睡眠,它不会占用这么多资源。好的,我会试试看