17 Stimmen

Wie übergibt man mehrere Parameter in einem Thread in VB

Ich möchte zwei oder mehr Parameter an einen Thread in VB 2008 übergeben.

Die folgende Methode (geändert) funktioniert gut ohne Parameter, und meine Statusleiste wird sehr cool-y aktualisiert. Aber ich kann nicht scheinen, um es mit einem, zwei oder mehr Parameter zu arbeiten.

Dies ist der Pseudo-Code von dem, was ich denke, sollte passieren, wenn die Taste gedrückt wird:

Private Sub Btn_Click() 

Dim evaluator As New Thread(AddressOf Me.testthread(goodList, 1))
evaluator.Start()

Exit Sub

Dies ist die Methode testthread:

Private Sub testthread(ByRef goodList As List(Of OneItem), ByVal coolvalue As Integer)

    StatusProgressBar.Maximum = 100000
    While (coolvalue < 100000)
        coolvalue = coolvalue + 1
        StatusProgressBar.Value = coolvalue
        lblPercent.Text = coolvalue & "%"
        Me.StatusProgressBar.Refresh()
    End While

End Sub

0voto

Hans Olsson Punkte 52909

Erstellen Sie einfach eine Klasse oder Struktur, die zwei Mitglieder hat, ein List(Of OneItem) und das andere Integer und senden Sie eine Instanz dieser Klasse ein.

Edit: Entschuldigung, ich habe übersehen, dass Sie auch Probleme mit einem Parameter hatten. Schau einfach mal nach Thread-Konstruktor (ParameterizedThreadStart) und diese Seite enthält ein einfaches Beispiel.

0voto

OverrockSTAR Punkte 1130

Ich denke, das wird Ihnen helfen... Erstellen von Threads und Übergabe von Daten zum Startzeitpunkt !

Imports System.Threading

' The ThreadWithState class contains the information needed for 
' a task, and the method that executes the task. 
Public Class ThreadWithState
    ' State information used in the task. 
    Private boilerplate As String 
    Private value As Integer 

    ' The constructor obtains the state information. 
    Public Sub New(text As String, number As Integer)
        boilerplate = text
        value = number
    End Sub 

    ' The thread procedure performs the task, such as formatting 
    ' and printing a document. 
    Public Sub ThreadProc()
        Console.WriteLine(boilerplate, value)
    End Sub  
End Class 

' Entry point for the example. 
' 
Public Class Example
    Public Shared Sub Main()
        ' Supply the state information required by the task. 
        Dim tws As New ThreadWithState( _
            "This report displays the number {0}.", 42)

        ' Create a thread to execute the task, and then 
        ' start the thread. 
        Dim t As New Thread(New ThreadStart(AddressOf tws.ThreadProc))
        t.Start()
        Console.WriteLine("Main thread does some work, then waits.")
        t.Join()
        Console.WriteLine( _
            "Independent task has completed main thread ends.")
    End Sub 
End Class 
' The example displays the following output: 
'       Main thread does some work, then waits. 
'       This report displays the number 42. 
'       Independent task has completed; main thread ends.

0voto

ISCI Punkte 326

Übergabe mehrerer Parameter für VB.NET 3.5

 Public Class MyWork

    Public Structure thread_Data            
        Dim TCPIPAddr As String
        Dim TCPIPPort As Integer            
    End Structure

    Dim STthread_Data As thread_Data
    STthread_Data.TCPIPAddr = "192.168.2.2"
    STthread_Data.TCPIPPort = 80  

    Dim multiThread As Thread = New Thread(AddressOf testthread)
    multiThread.SetApartmentState(ApartmentState.MTA)
    multiThread.Start(STthread_Data)     

    Private Function testthread(ByVal STthread_Data As thread_Data) 
        Dim IPaddr as string = STthread_Data.TCPIPAddr
        Dim IPport as integer = STthread_Data.TCPIPPort
        'Your work'        
    End Function

End Class

0voto

Timothy C. Quinn Punkte 2697

Mit VB 14 können Sie Folgendes mit Tupeln tun:

Shared Sub _runner(data as (goodList As List(Of OneItem), coolvalue As Integer))
    Console.WriteLine($"goodList: {data.goodList}")
    Console.WriteLine($"coolvalue: {data.coolvalue}")
    ' do stuff...
End Sub
Dim thr As New Thread(AddressOf _runner)
thr.Start((myGoodList, cval))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X