[在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#
感谢您的帮助
[要做的第一件事是将BackgroundWorker
组件拖放到表单上。单击DoWork
和RunWorkerCompleted
事件的组件和设置处理程序。然后,假设您使用所有默认名称,您的代码将如下所示:
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