有兩種(或更多)可能的方式。一種是使用ManualResetEvent
如下:
_Event = New ManualResetEvent(False); <-- Create event globally
然後,在你的線程的啓動代碼:
_ProgressThread = New Thread(AddressOf ExecProc)
_ProgressThread.IsBackground = False
_ProgressThread.Start()
//the flow of execution should come here only after the thread has executed the method
//but its coming and executing this line after the thread has started.
_Event.WaitOne(); <-- This waits!
_Event.Close(); <-- This closes the event
Me.MainInit()
_ProgressThread = Nothing
在你的線程的方法,你必須在所有情況下方法返回之前調用_Event.Set()
,否則你的應用程序將被阻止。
另一種方法是必須在完成時線程調用委託。您想要在線程完成後執行的代碼(Me.MainInit()
)將進入委託方法。這實際上是相當優雅的。
例如:
public delegate void ThreadDoneDelegate();
private void ExecProc()
{
ThreadDoneDelegate del = new ThreadDoneDelegate(TheThreadIsDone);
... // Do work here
this.Invoke(del);
}
private void TheThreadIsDone()
{
... // Continue with your work
}
對不起,我不磺化聚醚醚酮VB流利,所以你必須給這個小C#代碼段:-)
沒問題。我理解這兩個世界。不管怎麼說,還是要謝謝你。 – 2010-06-11 09:54:34
我有一個問題,我在線程方法內設置了一個進度條的值,所以每次我在寫入_event.set()之前設置進度條值,並從方法返回並執行maininit()方法。 – 2010-06-11 10:24:42
更新進度欄時,不要調用_event.Set()。你只能在你的線程方法真正退出之前調用它(無論是因爲錯誤還是因爲它的完成)。 – 2010-06-11 10:34:16