ParallelFor |跨线程操作无效:从创建它的线程以外的线程访问控制

时间:2013-10-16 23:15:02

标签: c# multithreading task-parallel-library

我有这个简单的代码,我正在尝试并行化:

 Parallel.For (0,countimages, i =>
                 {
 picbox[i] = new PictureBox();
                    picbox[i].Image = image;
 TableLayoutPanel1.Controls.Add(picbox[i], column, row);
 column+=1;

});

我收到此错误:

  

ParallelFor |跨线程操作无效:控制TableLayoutPanel1从其创建的线程以外的线程访问。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

UI更改只能从创建UI元素的线程进行。您的代码在多个线程中运行,并且每个线程都试图更改TableLayoutPanel1.Controls集合。

您必须将您的呼叫封送回UI线程。

您可能还会遇到与列值相关的意外行为,因为您似乎试图在线程之间共享它。在该值递增之前,有些控件可能会尝试添加到同一列。