如何知道我的应用程序进程运行的exe已经完成了它的工作

时间:2010-12-02 05:51:22

标签: c#

我有一个2 exe(控制台)

第一个exe提供转换视频格式的工具。 第二个exe提供了分割视频的工具。

在我的应用程序中,我有2个按钮,两个进程分别正常工作。 但现在我想让它在单击上工作。首先它应该使用第一个exe转换视频,然后使用第二个exe分割它。

问题是如何找到第一个exe已完成其工作,以便我可以启动第二个exe来处理第一个exe的输出。

我通过创建进程运行两个exe。

注意:我的两个exe在他们完成工作后都会接近,所以我们可能会检查现有流程,但我希望专家对此有所了解。

谢谢

3 个答案:

答案 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