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

时间:2010-11-02 09:04:41

标签: c# winforms multithreading process

我一直在寻找答案,但找不到一个简单的例子来帮助我理解。我在c#中编写win form app,它包含了一堆用于视频编码的命令行工具。我有一个名为 encodefiles 的方法我想在一个线程中运行此方法,以便UI仍然可以运行。一旦线程完成,我希望它调用另一个方法,所以我知道它已经完成。然后我可以编码下一个文件或完成。全部取决于是否还有其他文件需要编码。

当我只运行一个命令行工具时,我正在获取我想要的操作,因为我正在使用可以附加已完成事件的过程对象。我想为一个线程做同样的事但不知道如何。

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

Process myProcess = Process.Start(commandLineExe, commandlineSwitches);
myprocess.EnableRaisingEvents = true;
myprocess.Exited += new EventHandler(myprocess_exited);

希望有意义

在Visual Studio 2010中使用c#.NET 3.5

4 个答案:

答案 0 :(得分:4)

如果您使用的是winforms,并且您希望在后台运行任务并在完成使用后通知backgroundworker

并处理DoWork(),WorkerComplete(),progressChanged()事件以完成工作。

答案 1 :(得分:1)

你看过BackgroundWorker班了吗? 它为您提供了触发“进度已更改”事件的选项。

答案 2 :(得分:1)

再创建一个帖子。在它的线程过程中,执行:

yourMonitoredThread.Join();
CallYourProcedure(); //  can be event

编辑:

您可以从Thread派生并实现您需要的事件并使用它封装。

答案 3 :(得分:0)

也许是这样的:

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{};
}