背景工人问题

时间:2011-05-30 11:44:33

标签: vb.net

  

可能重复:
  Cross-thread operation not valid

您好, 我正在测试后台工作程序。我正在运行以下代码进行测试。

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 &#39;Contains my animated GIF

'目的是GIF保持循环(它是动画GIF),尽管计算机卡在无限循环中        bgwTest.RunWorkerAsync()    结束子

但是此代码会生成以下错误:

“跨线程操作无效:控制'ComboBox1'从其创建的线程以外的线程访问。”

请帮忙。 谢谢 Furqan

2 个答案:

答案 0 :(得分:2)

您不应修改非GUI线程上的GUI元素。对文本框,组合框,标签等的所有修改都应该在主线程上完成。如果BackgroundWorker位于RunWorkerCompletedProgressChanged个事件中。

因此,在DoWork事件中,您可以使用计算值填充一些数据结构(例如列表),并在RunWorkerCompleted事件中读取此结构并更新组合框。

答案 1 :(得分:1)

您无法从其他线程访问控件,您需要使用委托来实现此目的。

关于此事的进一步阅读在这里:

http://msdn.microsoft.com/en-us/library/ms171728.aspx