【发布时间】:2019-06-04 12:37:48
【问题描述】:
我正在尝试创建一个基于用户输入生成 Excel 文档的应用程序。文档可能会变得非常广泛(多张),所以我想将文档的创建放在 BackgroundWorker 上并将进度传递给 ProgressBar。
我在创建文档时访问 UI 控件时遇到问题。 如何从 BackgroundWorker 访问多个 UI 控件?
这是我想在 BackgroundWorker 中做的许多事情中的两个非常基本的示例:
Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
OpenWorkbook()
Dim Combobox() As ComboBox = {ComboBox1, ComboBox2, ComboBox3, ComboBox4}
With xlWorkBook.Sheets("Cover1")
.Range("E5").Value = TextBox1.Text
.Range("E6").Value = TextBox2.Text
.Range("E7").Value = TextBox3.Text
.Range("E8").Value = TextBox4.Text
For i = 0 To Combobox.Count - 1
.Range("A" & i + 1).Value = Combobox(i).Text
Next
End With
CloseWorkBook()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
我完全没有经验,在研究了这个主题之后,我仍然无法与 Delegate/Invoke 相处。任何帮助都是极好的。提前致谢。
【问题讨论】:
-
OpenWorkbook和CloseWorkBook发生了什么 -
您需要
DoWork中的控件值,而不是控件本身。 BackgroundWorker.RunWorkerAsync 重载允许您传递一个对象,该对象成为DoWorkEventArgs 的Arguments。您可以使用此对象将所需的所有值传递给DoWork方法。