gpt4 book ai didi

c# - 在 wpf 应用程序中运行其他控制台进程之前如何等待控制台进程完成?

转载 作者:行者123 更新时间:2023-11-30 12:17:14 30 4
gpt4 key购买 nike

我有 2 个要运行的外部进程(2 个控制台 exe),它们向控制台提供输出。我在 wpf 应用程序上运行这些应用程序。我捕获控制台输出并将其用作输入。

我是怎么做的1. 运行第一个进程。捕获控制台输出。2. 使用第一个过程输出做一些工作。3. 完成一些工作输出后运行第二个进程。

我遇到的问题是我必须等待其他进程完成并使用其输出,然后才能运行其他进程。当我想运行第二个进程时,第一个进程还没有完成。

public MainWindow()
{
InitializeComponent();
ExtProcess1();
ExtProcess2(); //this is executed before ExtProcess1 OutputDataReceived is completely captured
Instance = this;
}

public static void ExtProcess1()
{
Process process = new Process();
process.EnableRaisingEvents = true;
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
process.Exited += new EventHandler(process_Exited);
process.StartInfo.FileName = "test.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.Start();
process.PriorityClass = ProcessPriorityClass.RealTime;
process.BeginOutputReadLine();
process.WaitForExit();
}

static void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (MainWindow.Instance.lbLog.Dispatcher.Thread == Thread.CurrentThread)
{
String s = (String)e.Data;
MainWindow.Instance.lbLog.Items.Add(s);
}
else
{
MainWindow.Instance.lbLog.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send,
new EventHandler<DataReceivedEventArgs>(corePingPid_OutputDataReceived), sender, new object[] { e });
}
}

如何强制 wpf 应用程序在运行第二个进程之前等待第一个进程?

最佳答案

假设您正在使用 Process 类来执行和捕获控制台的输出,您可以使用 Process.WaitForExit方法。它将阻塞当前线程,直到进程完成执行。还有另一个重载可以阻塞当前线程,直到进程完成或指定的超时时间结束。

关于c# - 在 wpf 应用程序中运行其他控制台进程之前如何等待控制台进程完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075046/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com