【发布时间】:2014-09-17 05:15:45
【问题描述】:
是这样的:
我有一个DataGridView 表格,当我开始表格DGV 应该开始填写BackgroundWorker。
Private Sub FirstSub()
adoconn()
Me.Enabled = False
bw.RunWorkerAsync()
Me.Enabled = True
End Sub
Private Sub bw_DoWork(sender As Object, e As DoWorkEventArgs) Handles bw.DoWork
Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
If DataGridView1.InvokeRequired Then
'//For VB 10 you can use an anonymous sub
DataGridView1.Invoke(Sub() bw_DoWork(sender, e))
Else
Try
DataBaseLayer.FillDTwithSP("ArticlesSelect", ds_Tables.Articles)
Me.DataGridView1.DataSource = ds_Tables.Articles
Me.DataGridView1.ClearSelection()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End If
End Sub
在 Carlos 给我一个应该怎么做的例子之后,我做了这个,但现在我有一个问题,当我放置 BrakePoint 时甚至没有进入 bw_DoWork sub
Private Sub FirstSub()
adoconn()
Me.Enabled = False
bw.WorkerReportsProgress = True
AddHandler bw.DoWork, AddressOf bw_DoWork
AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged
Me.Enabled = True
End Sub
Private Sub bw_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
Try
DataBaseLayer.FillDTwithSP("ArticlesSelect", ds_Tables.Articles)
Me.DataGridView1.DataSource = ds_Tables.Articles
Me.DataGridView1.ClearSelection()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub bw_DoWork(sender As Object, e As DoWorkEventArgs)
Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
bw.ReportProgress(sender, e)
End Sub
所以,我想要的是禁用表单上的所有控件,直到我的 DataTable 被填满并且 DataGridView 显示来自 DT 的结果集。
问题是,当我加载此表单时,它会在所有操作完成后再次冻结和取消冻结,因此完全没有 BackgroundWorker 的影响。
如果您需要更多信息或代码部分,请随时告诉我,以便我解决此问题。
谢谢,
呵呵
【问题讨论】:
标签: vb.net winforms visual-studio-2012 datagridview backgroundworker