2016-07-18 4 views
0

Wie kann ich einen Thread spawnen, der einen ByRef-Parameter hat? Ich möchte die Nachricht überprüfen, die in der Subroutine festgelegt ist.in vb.net, wie man einen Thread spawnt, der einen Byref-Parameter hat?

Stoppt auch die Lauffläche automatisch, wenn die DoWork-Methode beendet wird?

ich habe:

Dim thread As New Thread(AddressOf DoWork(strMessage)) 
    thread.Start() 

    Public Sub DoWork(ByRef strMessage As String) 

     DBFunc.OpenDB() 

     Try 
      With DBFunc.objCmd 
       .CommandType = Data.CommandType.StoredProcedure 
       .CommandText = "ProcessBandwidthLogCalculated" 
       .ExecuteNonQuery() 
      End With 
     Catch sqlex As SqlException 
      strMessage = sqlex.Message 
     Catch ex As Exception 
      strMessage = ex.Message 
     Finally 
      ' Close database. 
      DBFunc.CloseDB() 
     End Try 
    End Sub 
+0

Hmm, wann planen Sie, den zurückgegebenen Wert zu verwenden? Sie müssen natürlich warten, bis der Thread fertig ist, was dazu führt, dass die Verwendung eines Threads eher schlecht ist. –

Antwort

1

Sie dies nicht tun. ByRef soll nicht über Threads hinweg verwendet werden. Sie müssen die Ergebnisse mit einer anderen Methode zurückgeben.

Betrachten Sie in Async/erwarten.

+0

Ich möchte Async/Await nicht verwenden, da die DoWork-Methode in einer Abrufmethode (einem Timer) aufgerufen wird. Ich möchte diesen Timer nicht aufhalten. Kann ich einfach die DoWork() - Methode ohne die Variable "strMessage ByRef" definieren und stattdessen eine globale Variable in dieser Methode festlegen und sie nur nach Abschluss des Threads überprüfen? Wird der Thread automatisch beendet, wenn die DoWork-Methode beendet wird? – user3020047

+0

Ja, das kannst du tun. Einem Referenzvariablen einen Wert zuzuweisen, ist eine "atomare" Operation und somit threadsicher. –

+0

Ja, Gewinde werden am Ende ihrer Funktion automatisch zerstört. (Daher ist es günstiger, den Thread-Pool zu verwenden, als eigene Threads zu erstellen.) –

Verwandte Themen