Heim >Backend-Entwicklung >C#.Net-Tutorial >Probleme bei der Verwendung von Steuerelementen im Formular in Threads während der .net-Programmierung
Als ich VB.net schrieb, stieß ich auf die Notwendigkeit, die Informationen im ListView-Steuerelement im Formular in einem Thread zu ändern. Als ich damit begann, stellte ich fest, dass es nicht so einfach war. Weil das Microsoft-Framework keinen direkten Zugriff auf Steuerelemente im Formular im Thread fördert. Denn dadurch wird die normale Ausführung des UI-Prozesses verändert. Wenn Sie dies tun müssen, müssen Sie die Invoke-Funktion oder die InvokeBegin-Funktion im Thread verwenden. Hier ist ein Beispiel:
Imports System.Threading
Public Class Form1
Delegate Sub AddListItem(ByVal IPString As String, ByVal ScanPort As Integer)
Public myDelegate As AddListItem
Public OpenPortCount As Integer = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myDelegate = New AddListItem(AddressOf AddListItemMethod)
Ende Sub
Private Sub Start_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Behandelt Start_Button.Click
Dim mythread As Thread
mythread = New Thread(New ThreadStart(AddressOf ThreadFunction) )
mythread.Start()
End Sub
Private Sub ThreadFunction()
Mythread als Thread dimmen
mythread = New Thread(New ThreadStart(AddressOf DoScanThread))
mythread.Start()
End Sub 'ThreadFunction
Private Sub DoScanThread()
Dim myThreadClassObject As New ScanThreadClass(Me)
myThreadClassObject.run()
End Sub
Public Sub AddListItemMethod(ByVal IPString As String, ByVal scanport As Integer)
ListView_Result.Items.Add(IPString, OpenPortCount) 'ScanIP.ToString(), 0)
ListView_Result. Items(OpenPortCount).SubItems.Add(scanport.ToString())
OpenPortCount += 1
End Sub 'AddListItemMethod
End Class
Public Class ScanThreadClass
Private myFormControl1 As Form1
Public Sub New(ByVal myForm As Form1)
myFormControl1 = myForm
End Sub 'New
Public Sub run()
myFormControl1. Invoke(myFormControl1.myDelegate, New Object() {"11", 123})
End Sub
End Class
Das Wichtigste, worauf man achten sollte, ist der Aufruf von Invoke and die Definition von Delegierter.