2011-05-30 35 views
0

Possible Duplicate:
Cross-thread operation not valid后台工作问题

嗨, 我测试背景workder。我正在运行以下代码进行测试。

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 

末次

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

+0

你应该尝试使用搜索功能SO至少一次与关键字有关您的问题。即使谷歌可能会帮助。 – deostroll 2011-05-30 11:48:31

+0

嗨。在编译器或运行时错误的情况下,将错误消息的相关部分复制到问题的标题中是一个好主意,因为您将获得SO上存在的所有主题上的所有重复项。这里有一堆:http://stackoverflow.com/search?q=cross+thread - 我把这个问题作为一个重复,我们现在真的不需要更多的这些问题。 – 2011-05-30 17:53:00

回答

2

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

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