我有这个简单的代码,我正在尝试并行化:
Parallel.For (0,countimages, i =>
{
picbox[i] = new PictureBox();
picbox[i].Image = image;
TableLayoutPanel1.Controls.Add(picbox[i], column, row);
column+=1;
});
我收到此错误:
ParallelFor |跨线程操作无效:控制TableLayoutPanel1从其创建的线程以外的线程访问。
我做错了什么?
答案 0 :(得分:0)
UI更改只能从创建UI元素的线程进行。您的代码在多个线程中运行,并且每个线程都试图更改TableLayoutPanel1.Controls集合。
您必须将您的呼叫封送回UI线程。
您可能还会遇到与列值相关的意外行为,因为您似乎试图在线程之间共享它。在该值递增之前,有些控件可能会尝试添加到同一列。