我已经尝试了几种方法来做这件事,但我似乎无法找到一个将工作。我有一个GUI,当你按下按钮时,所有的处理都是在一个线程上完成的。举一个例子,如果我有以下代码:如何从另一个线程填充面板?
public void coolMethod()
{
int a = 0;
while (a != 20)
{
addPicturebox();
a++;
Thread.Sleep(1000);
}
}
int width = 3;
int height = 3;
int imgCounter = 0;
public void addPicturebox()
{
PictureBox pb = new PictureBox();
pb.Size = new Size(50, 50);
pb.Location = new Point(width, height);
pb.ImageLocation = @"C:\Users\User1\Pictures\white.png";
pb.Show();
panel1.Controls.Add(pb);
imgCounter++;
width += 53;
if (imgCounter == 5)
{
height += 53;
width = 3;
imgCounter = 0;
}
}`
它将工作然而coolMethod()
是在不同的线程运行,我不能更新/面板上呈现来自不同的线程添加控件。
有没有人有一个解决方案,我可以在thread1上运行coolMethod,但是一旦它调用addPicturebox()
,这个方法将在gui线程上运行,并暂停thread1直到方法结束或任何其他建议。
非常感谢,如果你可以。如果已经回答了这个问题,您可以将我也链接到该页面,因为我查看了很多人,但无法找到适用于此场景的示例。
哇,这是一个快速的反应,我已经尝试这样做,它完美地工作。谢谢你一堆Valjura – Faker 2014-11-24 08:44:54
@Faker如果它符合你的期望,接受答案。 – Grx70 2014-11-24 08:48:07