VB.Net 解決winForm界面卡死

問題,利用多線程解決界面卡死時,控件不能在新建的線程中訪問。多線程



解決方法,異步

可以使用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

相關文章
相關標籤/搜索