你好,我想用一个线程更改从form1创建的form2的位置,在另一个带有struct的form2中创建的线程中
编辑: 我发表了另一篇文章
还有另一个问题, 如何使Form2停止思考?
这是一个类似的代码,可以使其保持简单。 加载Form1后,将创建一个线程,该线程将运行其中具有无限循环的方法,并有时创建Form2并继续循环,问题是Form2永不停止思考。
public partial class Form1 : Form
{//Form1
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Thread childThread = new Thread(new ThreadStart(loop);
childThread.Start();
}
public void loop()
{
int i = 0;
while (true)
{
if (i == 45)
{
Form2 f = new Form2();
f.Show();
}
i = i + 1;
}
}
}
}
public partial class Form2 : Form
{//Form2
public Form2()
{
InitializeComponent();
}
public struct Rect
{
public int Left { get; set; }
public int Top { get; set; }
public int Right { get; set; }
public int Bottom { get; set; }
}
private void Form2_Load(object sender, EventArgs e)
{
Thread childThread = new Thread(new ThreadStart(method));
childThread.Start();
}
public void method()
{
Rect move = new Rect();
move.Left = 100;
move.Top = 100;
this.Invoke(new MethodInvoker(() => { mover(move); }));
}
public void mover(Rect move)
{
this.Left = move.Left;
this.Top = move.Top;
}
}
答案 0 :(得分:0)
您应该创建一个方法
void SetLeft(int left)
{
this.Left = left;
}
您可以从任何线程调用它:
if (this.InvokeRequired) {
this.Invoke(new MethodInvoker(() => { SetLeft(10); } );
} else {
SetLeft(10);
}