C# 如何在线程中运行方法并在线程退出时调用方法

C# 如何在线程中运行方法并在线程退出时调用方法,c#,winforms,multithreading,process,C#,Winforms,Multithreading,Process,我一直在寻找答案,但找不到一个简单的例子来帮助我理解。我正在用c#编写win form应用程序,它包含了一系列用于视频编码的命令行工具。我有一个名为encodefiles的方法,我想在线程中运行这个方法,以便UI仍然可以运行。一旦线程完成,我希望它调用另一个方法,这样我就知道它已经完成了。然后我可以对下一个文件进行编码或完成。这一切都取决于是否还有更多的文件需要编码 当我只运行一个命令行工具时,我得到了我想要的操作,因为我正在使用进程对象,您可以将完成的事件附加到该对象。我想要同样的线,但不知道

我一直在寻找答案,但找不到一个简单的例子来帮助我理解。我正在用c#编写win form应用程序,它包含了一系列用于视频编码的命令行工具。我有一个名为encodefiles的方法,我想在线程中运行这个方法,以便UI仍然可以运行。一旦线程完成,我希望它调用另一个方法,这样我就知道它已经完成了。然后我可以对下一个文件进行编码或完成。这一切都取决于是否还有更多的文件需要编码

当我只运行一个命令行工具时,我得到了我想要的操作,因为我正在使用进程对象,您可以将完成的事件附加到该对象。我想要同样的线,但不知道如何

简言之,我希望能够用一个线程而不是一个进程来执行以下操作

Process myProcess = Process.Start(commandLineExe, commandlineSwitches);
myprocess.EnableRaisingEvents = true;
myprocess.Exited += new EventHandler(myprocess_exited);
希望这是有道理的


我正在visual studio 2010中使用c#.NET 3.5,你看过这门课了吗?
它为您提供了触发“进度更改”事件的选项

你看过这门课了吗?
它为您提供了触发“进度更改”事件的选项

如果您正在使用winforms,并且希望在后台运行任务,并在任务使用完成时发出通知


并处理DoWork()、WorkerComplete()和progressChanged()事件以完成工作

如果您正在使用winforms,并且希望在后台运行任务,并在任务使用完成时发出通知


并处理DoWork()、WorkerComplete()和progressChanged()事件以完成工作

可能是这样的:

public class MyThread
{
    Thread _thread;

    public MyThread()
    { 
        _thread = new Thread(WorkerMethod);
    }

    public void Start()
    {
        _thread.Start();
    }

    private void WorkerMethod()
    {
        // do something useful
        // [...]

        //Exiting this method = exit thread => trigger event
        Exited(this, EventArgs.Empty);
    }

    public event EventHandler Exited = delegate{};
}

也许是这样的:

public class MyThread
{
    Thread _thread;

    public MyThread()
    { 
        _thread = new Thread(WorkerMethod);
    }

    public void Start()
    {
        _thread.Start();
    }

    private void WorkerMethod()
    {
        // do something useful
        // [...]

        //Exiting this method = exit thread => trigger event
        Exited(this, EventArgs.Empty);
    }

    public event EventHandler Exited = delegate{};
}

再创建一个线程。在其线程过程中,执行以下操作:

yourMonitoredThread.Join();
CallYourProcedure(); //  can be event
编辑:


您可以从
线程
派生并实现所需的事件并使用它进行封装。

再创建一个线程。在其线程过程中,执行以下操作:

yourMonitoredThread.Join();
CallYourProcedure(); //  can be event
编辑:


您可以从
线程
派生并实现所需的事件,并将其封装使用。

您在流程中运行的应用程序是什么。启动?我的意思是commandLineExe是另一个c#控制台应用程序吗?过程代码只是一个示例,演示了他想用线程实现什么。类似于
thread.Exited+=OnExit
您在流程中运行的应用程序是什么。启动吗?我的意思是commandLineExe是另一个c#控制台应用程序吗?过程代码只是一个示例,演示了他想用线程实现什么。类似于
thread.Exited+=OnExit