2010-11-02 43 views
1

我一直在尋找這個答案,但找不到一個簡單的例子來幫助我理解。我正在用c#編寫win表單應用程序,它包裝了一些用於視頻編碼的命令行工具。我有一個方法叫做encodefiles我想在一個線程中運行這個方法,這樣UI仍然可以運行。一旦線程完成,我希望它調用另一個方法,所以我知道它已完成。然後我可以編碼下一個文件或完成。全部取決於是否還有其他文件需要編碼。如何在線程中運行方法並在線程退出時調用方法

當我只使用一個命令行工具時,我正在得到我想要的操作,因爲我正在使用可以附加完成的事件的過程對象。我想同一個線程,但不知道如何。

總之我希望能夠做一個線程,而不是一個過程

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

希望是有道理以下

正在使用C#.NET 3.5和Visual Studio 2010

+0

您在Process.Start中運行的應用程序是什麼?我的意思是commandLineExe是另一個C#控制檯應用程序? – 2010-11-02 09:10:17

+2

流程代碼僅僅是一個例子,用於演示他想通過一個線程實現什麼。像'thread.Exited + = OnExit' – jgauffin 2010-11-02 09:17:23

回答

4

好,如果你正在使用的WinForms,你想在後臺運行一個任務,當它完成了使用backgroundworker

通知和處理的DoWork(),WorkerComplete(),progressChanged()事件來完成您的工作。

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

創建一個更線程。在它的線程程序,做到:

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

編輯:

您可以從Thread派生並實現你需要的事件,並用它包裹。