我一直在寻找答案,但找不到一个简单的例子来帮助我理解。我在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
答案 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{};
}