【发布时间】:2011-02-25 10:23:51
【问题描述】:
我已经创建了:
private System.Windows.Forms.PictureBox [] RedBoxes;
然后在 form_load 中,我这样做:
RedBoxes = new PictureBox[20];
for (int i = 0; i < 20; i++)
{
RedBoxes[i] = new PictureBox();
RedBoxes[i].Image = global::IDMTestClient.Properties.Resources.Red;
RedBoxes[i].Name = "RedBox" + i.ToString();
RedBoxes[i].Size = new Size(1, 38);
RedBoxes[i].Location = new Point(i + 10, 32);
RedBoxes[i].TabIndex = i + 2;
RedBoxes[i].TabStop = false;
groupBox3.Controls.Add(RedBoxes[i]);
RedBoxes[i].Visible = false;
RedBoxes[i].BringToFront();
}
现在,当我尝试在另一个函数中访问 RedBoxes 时,它会抛出:
“System.Windows.Forms.dll 中发生了“System.InvalidOperationException”类型的第一次机会异常”
例如:
当我这样做时:
RedBoxes[i].Left = 10;
或
RedBoxes[i].Location = new Point(10, 32);
我做错了什么?
/------------------更新------- em>/
base {System.SystemException} = {"跨线程操作无效:控件'groupBox3'从创建它的线程以外的线程访问。"}
这就是 RedBoxes[i] 所拥有的。 WinForms 自动生成线程的工作原理?
【问题讨论】:
-
@user633943 - 您在代码中的哪个位置执行这两个操作,因为它们不在您发布的主代码示例中? - 对不起,如果这是一个愚蠢的问题
-
你在使用线程吗?请按照@Digger 的要求提供更多示例代码,这样人们就不必一直猜测,直到有人猜对了。
-
第一个(带有for循环)在form1_load()中;我做“RedBoxes[i].Location = new Point(10, 32);”的地方是 form1 的成员函数。
标签: c# winforms arrays dynamic picturebox