我有一个2 exe(控制台)
第一个exe提供转换视频格式的工具。 第二个exe提供了分割视频的工具。
在我的应用程序中,我有2个按钮,两个进程分别正常工作。 但现在我想让它在单击上工作。首先它应该使用第一个exe转换视频,然后使用第二个exe分割它。
问题是如何找到第一个exe已完成其工作,以便我可以启动第二个exe来处理第一个exe的输出。
我通过创建进程运行两个exe。
注意:我的两个exe在他们完成工作后都会接近,所以我们可能会检查现有流程,但我希望专家对此有所了解。
谢谢
答案 0 :(得分:3)
如下:
Process p1 = Process.Start("1.exe");
p1.WaitForExit();
Process p2 = Process.Start("2.exe");
答案 1 :(得分:3)
如果您使用的是GUI,则在使用WaitForExit时它将暂停 这是一个异步的例子。您必须根据自己的需要进行调整:
using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Threading;
class ConverterClass
{
private Process myProcess = new Process();
private bool finishedFlag = false;
/* converts a video asynchronously */
public void ConvertVideo(string fileName)
{
try
{
/* start the process */
myProcess.StartInfo.FileName = "convert.exe"; /* change this */
/* if the convert.exe app accepts one argument containing
the video file, the line below does this */
myProcess.StartInfo.Arguments = fileName;
myProcess.StartInfo.CreateNoWindow = true;
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new EventHandler(myProcess_Exited);
myProcess.Start();
}
catch (Exception ex)
{
/* handle exceptions here */
}
}
public bool finished()
{
return finishedFlag;
}
/* handle exited event (process closed) */
private void myProcess_Exited(object sender, System.EventArgs e)
{
finishedFlag = true;
}
public static void Main(string[] args)
{
ConverterClass converter = new ConverterClass();
converter.ConvertVideo("my_video.avi");
/* you should watch for when the finished method
returns true, and then act accordingly */
/* as we are in a console, the host application (we)
may finish before the guest application (convert.exe),
so we need to wait here */
while(!converter.finished()) {
/* wait */
Thread.Sleep(100);
}
/* video finished converting */
doActionsAfterConversion();
}
}
当程序退出时,finishedFlag将设置为true,并且finished()方法将开始返回。请参阅Main以了解“您应该如何操作”。
答案 2 :(得分:1)
如果它在Windows中,只需在CreateProcess返回的句柄上调用WaitForSingleObject