VB.NET WinForms - 如何从BackgroundWorker的线程访问主线程的对象?

3
我正在使用BackgroundWorker,希望当用户仍可以在表单上执行其他任务时,该BackgroundWorker可从数据库中检索数据。问题在于,在检索完数据后,我似乎无法从BackgroundWorkerDoWork事件中访问我的Form中的ListView。我将使用检索到的数据填充该ListView。我该怎么办?我漏掉了什么吗?
考虑以下示例,这是我的操作方式:
Public Class Test
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        BackgroundWorker1.RunWorkerAsync()
    End Sub

    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Label1.Text = "Hello World"
    End Sub
End Class

发布一些你尝试过的东西... - Binil
@Binil 我认为问题很清楚。如果你知道答案,源代码就不是必要的。 - kazinix
@Binil 我已经编辑了我的问题,变得更简单了。无论如何,感谢您的回复。 - kazinix
2个回答

2

那么我如何将我从“DoWork”创建的对象传递给任何函数、对象或“ProgressChanged”呢? - kazinix
@domanokz - 我已经添加了一个链接到另一个示例,展示了在工作线程和UI线程之间共享对象的一种方法。 - Damien_The_Unbeliever
谢谢!那解决了我的第一个问题,现在我的问题是如何传递参数给DoWork,因为我无法访问其他控件。嗯,我会找到的。再次感谢! - kazinix
哈哈!这很简单,就像 BackgroundWorker1.RunWorkerAsync("Hello Asynchronous World")。我只需将它们提取到 DoWork 中。 - kazinix

0

DoWorkEventArgs 包含一个 Argument 属性,您可以在其中存储任何对象,例如包含操作 UI 的指令的自定义类。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接