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 で現在行っている方法です。これはパターンですか?

4

1 に答える 1

7

これは非常に基本的な例です。main メソッドは、単純に 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
于 2012-07-06T17:30:49.727 に答える