首頁  >  文章  >  後端開發  >  .net編程時在執行緒使用Form上的控制項的問題

.net編程時在執行緒使用Form上的控制項的問題

巴扎黑
巴扎黑原創
2016-12-20 14:41:141282瀏覽

在寫VB.net時,遇到要在線程裡改變Form上的ListView控件中的信息,動手做起來才發現並不是那麼容易。因為微軟的框架並不鼓勵在執行緒裡直接存取Form上的控制項。因為這樣會改變UI進程的正常執行。如果必須這樣做,則需要在執行緒中使用Invoke函數或InvokeBegin函數。以下是一個例子:

Imports System.Threading

Public Class Form1
Delegate Sub AddListItem(ByVal IPString As String, ByVal ScanPort As Integer)
Public myDelegate As AddListItemItem, ByVal ScanPort As Integer)
Public myDelegate As AddListItems sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

myDelegate = New AddListItem(AddressOf AddListItemMethod)

End Sub

Private SubEvent_Button_Click(ByVal sender As System HandArgles eender e. Start_Button.Click

Dim mythread As Thread

mythread = 新 Thread(New ThreadStart(AddressOf ThreadFunction))
mythread.Start()

End Sub

As ThreadStart(AddressOf DoScanThread))

mythread.Start()

End Sub 'ThreadFunction


Private Sub DoScanThread()
Dim myThreadClassObject As New ScanThreadClass(Me)my
Dim myThreadClass對象IPString As String, ByVal scanport As Integer)
ListView_Result.Items.Add(IPString, OpenPortCount) 'ScanIP.ToString(), 0)

ListView_Result.Items(OpenPortCount).SubItems.Add(scanport.ToString( = 1

End Sub 'AddListItemMethod

End Class

Public Class ScanThreadClass

Private myFormControl1 As Form1

Public Sub New(ByVal myForm As Form1)
my myFormControl1.Invoke(myFormControl1.myDelegate, New Object() {"11", 123})
End Sub

End Class

主要注意的就是Invoke的呼叫和Delegate的定義。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn