Vb.net 访问Backgroundworker中的数据表和变量
在我的程序中,我使用了一个数据表,它是在加载表单时填充的。我用backgroundworker做一些网络操作。在backgroundworker的doWork()中,我需要来自datatable的数据,以及在加载表单时创建的类的对象。datatable和class对象中的数据在Dowork()中更新,datatable和class对象中的此值也在backgroundworker的ProgressChanged中的listivew中更新。 datatable和class对象都声明为Form1的全局对象。Vb.net 访问Backgroundworker中的数据表和变量,vb.net,multithreading,backgroundworker,Vb.net,Multithreading,Backgroundworker,在我的程序中,我使用了一个数据表,它是在加载表单时填充的。我用backgroundworker做一些网络操作。在backgroundworker的doWork()中,我需要来自datatable的数据,以及在加载表单时创建的类的对象。datatable和class对象中的数据在Dowork()中更新,datatable和class对象中的此值也在backgroundworker的ProgressChanged中的listivew中更新。 datatable和class对象都声明为Form1的全局
但是我读到这不是线程安全的。那么如何正确使用以线程安全的方式使用它呢?您可以将一个参数从RunWorkerAsync传递到DoWork,这可以是一个数组来完成:
dim bgw as new BackgroundWorker
dim dt as DataTable
dim anything as ...
...
bgw.RunWorkerAsync(New Object() {dt, anything, ...})
...
内榫:
Private Sub BGW_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs)
Dim dt as DataTable
dt = TryCast(e.Argument(0), DataTable)
' and so on
一旦开始修改表单上任何与UI相关的内容,就可以开始阅读BeginInvoke和InvokeRequired。可能有很多问题,但我的这个问题可能是一个很好的例子:看看锁定和/或参数化ThreadStart。