Vb.Net Windows窗体-防止“不响应”

问题描述 投票:0回答:1

[在Windows窗体上运行代码时,有时(通常在循环时)程序标题即使仍可以正常运行,也会显示“无响应”。

就我而言,我循环并填充数组>数组到表>表到datagridview

示例:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim ArrayNew(1000001, 2) As Object

    For i = 0 To 1000000
        For j = 0 To 1
            ArrayNew(i, j) = "TEST"
        Next j
    Next i

    Table1 = New DataTable("EXAMPLETABLE")
    Table1.Columns.Add("COLUMN1")
    Table1.Columns.Add("COLUMN2")
    Table1.Columns.Add("COLUMN3")

    Dim RowNo As Integer = 0
    Do
        Table1.Rows.Add(New String() {RowNo + 1, ArrayNew(RowNo , 0), ArrayNew(RowNo , 1)})
        RowNo = RowNo + 1
    Loop Until ArrayNew(RowNo , 1) = ""

    DataGridView1.DataSource = Table1

End Sub

我读到某个地方应该使用线程?或背景工,但不确定如何在此处使用就像很多问题都指向此一样-http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

但是我不懂C#

感谢您的帮助

vb.net loops datagridview backgroundworker
1个回答
0
投票

[要做的第一件事是将BackgroundWorker组件拖放到表单上。单击DoWorkRunWorkerCompleted事件的组件和设置处理程序。然后,假设您使用所有默认名称,您的代码将如下所示:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    backgroundWorker1.RunWorkerAsync();
End Sub

Private Sub backgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles backgroundWorker1.DoWork
    Dim Table1 As New DataTable("EXAMPLETABLE")
    Table1.Columns.Add("COLUMN1")
    Table1.Columns.Add("COLUMN2")
    Table1.Columns.Add("COLUMN3")

    For i As Integer = 1 To 1000000
        Table1.Rows.Add(New String() {i.ToString(), "Test", "Test"})
    Next
    e.Result = Table1
End Sub

Private Sub backgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
    DataGridView1.DataSource = e.Result
End Sub

更多信息,包括报告进度的示例(使用C#,但可以轻松转换为VB.Net)在这里:

https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.backgroundworker?view=netcore-3.1

© www.soinside.com 2019 - 2024. All rights reserved.