0

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

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

});

我得到这个错误:

并行| 跨线程操作无效:控件 TableLayoutPanel1 从创建它的线程以外的线程访问。

我究竟做错了什么?

4

1 回答 1

0

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

您必须将调用编组回 UI 线程。

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

于 2013-10-16T23:25:10.973 回答