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