問題,利用多線程解決界面卡死時,控件不能在新建的線程中訪問。多線程
解決方法,異步
可以使用Invoke或BeginInvoke,在擁有此控件的基礎窗口句柄的線程上執行指定的委託。spa
Invoke 方法 (Delegate) :在擁有此控件的基礎窗口句柄的線程上執行指定的委託;線程
BeginInvoke 方法 (Delegate) :在建立控件的基礎句柄所在線程上異步執行指定委託。code
代碼:orm
Public Class Form1 Private Delegate Sub AddLstItemDelegate(ByRef lst As ListBox, ByVal txt As String) Private Sub AddLstItemInvoke(ByRef lst As ListBox, ByVal txt As String) lst.Items.Add(txt) End Sub Private th As Threading.Thread Private Sub TaskTest() Dim i As Integer For i = 0 To 20 Threading.Thread.Sleep(1000) ListBox1.Invoke(New AddLstItemDelegate(AddressOf AddLstItemInvoke), New Object() {ListBox1, i.ToString}) Next End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click th = New Threading.Thread(AddressOf TaskTest) th.Start() End Sub End Class
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。class