Heim  >  Artikel  >  Backend-Entwicklung  >  Probleme bei der Verwendung von Steuerelementen im Formular in Threads während der .net-Programmierung

Probleme bei der Verwendung von Steuerelementen im Formular in Threads während der .net-Programmierung

巴扎黑
巴扎黑Original
2016-12-20 14:41:141331Durchsuche

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.


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn