您好, 我正在测试后台工作程序。我正在运行以下代码进行测试。
Private Sub bgwTest_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwTest.DoWork
Dim a As Integer = 0
Do While a < 10 'Infinite loop
ComboBox1.Items.Add(1)
Loop
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
PictureBox1.Visible = True 'Contains my animated GIF
'目的是GIF保持循环(它是动画GIF),尽管计算机卡在无限循环中 bgwTest.RunWorkerAsync() 结束子
但是此代码会生成以下错误:
“跨线程操作无效:控制'ComboBox1'从其创建的线程以外的线程访问。”
请帮忙。 谢谢 Furqan
答案 0 :(得分:2)
您不应修改非GUI线程上的GUI元素。对文本框,组合框,标签等的所有修改都应该在主线程上完成。如果BackgroundWorker位于RunWorkerCompleted和ProgressChanged个事件中。
因此,在DoWork事件中,您可以使用计算值填充一些数据结构(例如列表),并在RunWorkerCompleted
事件中读取此结构并更新组合框。
答案 1 :(得分:1)