VB.Net 解決winForm界面卡死

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



解決方法,

可使用Invoke或BeginInvoke擁有此控件的基礎窗口句柄的線程上執行指定的委託。

Invoke 方法 (Delegate) :擁有此控件的基礎窗口句柄的線程上執行指定的委託;

BeginInvoke 方法 (Delegate) :在創建控件的基礎句柄所在線程上異步執行指定委託。

代碼:

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


發佈了39 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章