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

本文关键字:线程 创建 控件 访问 无效 操作 | 更新日期: 2023-09-27 18:35:52

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

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

我收到此错误:

平行为 |跨线程操作无效:从创建它的线程以外的线程访问的 Control TableLayoutPanel1

我做错了什么?

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

UI

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

您必须将调用封送回 UI 线程。

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