访问Backgroundworker中的数据表和变量

时间:2012-10-28 04:29:20

标签: vb.net multithreading backgroundworker

在我的程序中,我使用的数据表是在加载表单时填充的。我使用backgroundworker来做一些网络操作。在backgroundworker里面的doWork()我需要来自datatable的数据,以及我在加载表单时创建的类的对象。数据表和类对象中的数据在Dowork()中更新,并且数据表和类对象中的这些值在后台工作程序的ProgressChanged中的listivew中更新。 数据表和类对象都声明为Form1的全局。 但我读到这不是线程安全的。那么如何正确使用它以线程安全的方式使用它?

1 个答案:

答案 0 :(得分:0)

您可以将一个参数从RunWorkerAsync传递给DoWork,这可以是一个数组来实现它:

dim bgw as new BackgroundWorker
dim dt as DataTable
dim anything as ...
...
bgw.RunWorkerAsync(New Object() {dt, anything, ...})

...

在doWork中:

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的内容。那里可能有很多,但也许这个问题可能是一个很好的样本:
Multithreading for a progressbar and code locations (vb.net)?