2012-05-01 16 views
1
Static lock As Object 

SyncLock lock 
    TraverSingweb.TraverSingWeb.WebInvoke(Sub() TraverSingweb.TraverSingWeb.putHtmlIntoWebBrowser(theenchancedwinclient)) 'This quick function need to finish before we continue 
End SyncLock 

SyncLock lock 
    'SuperGlobal.lockMeFirst(AddressOf SuperGlobal.doNothing) ' donothing 
End SyncLock 

これは私が現在vb.netで行っている方法です。これはパターンですか?別のスレッドが終了するまでスレッドを待ちますか?

+0

[Albahari](http://www.albahari.com/threading/)には本当に良い無料の電子書籍があります。 –

答えて

7

ここは本当に基本的な例です。メインメソッドは単に2つのスレッドを作成して開始します。最初のスレッドは10秒待ってから_WaitHandle_FirstThreadDoneを設定します。 2番目のスレッドは、続行する前に_WaitHandle_FirstThreadDoneが設定されるのを待つだけです。両方のスレッドは同時に開始されますが、2番目のスレッドは最初のスレッドが_WaitHandle_FirstThreadDoneを設定するまで待ちます。

参照:詳細はSystem.Threading.AutoResetEventを参照してください。

Module Module1 

    Private _WaitHandle_FirstThreadDone As New System.Threading.AutoResetEvent(False) 

    Sub Main() 
     Console.WriteLine("Main Started") 
     Dim t1 As New Threading.Thread(AddressOf Thread1) 
     Dim t2 As New Threading.Thread(AddressOf thread2) 
     t1.Start() 
     t2.Start() 
     Console.WriteLine("Main Stopped") 
     Console.ReadKey() 
    End Sub 

    Private Sub Thread1() 
     Console.WriteLine("Thread1 Started") 
     Threading.Thread.Sleep(10000) 
     _WaitHandle_FirstThreadDone.Set() 
     Console.WriteLine("Thread1 Stopped") 
    End Sub 

    Private Sub thread2() 
     Console.WriteLine("Thread2 Started") 
     _WaitHandle_FirstThreadDone.WaitOne() 
     Console.WriteLine("Thread2 Stopped") 
    End Sub 
End Module 
関連する問題