C# 移动2个控件(picturebox)平行移动不是顺序
C# 移动2个控件(picturebox)平行移动不是顺序,c#,.net,runtime,controls,sametime,C#,.net,Runtime,Controls,Sametime,两个虚拟鼠标图像的任务是水平移动并单击目标点。在下面的代码中,是按顺序成功运行的(一个接一个)。 我想编辑这段代码,使之并行工作(两个图像同时工作) mouseimg1 refere=>mouse 1和mouseimg2 refere=>mouse 2 public partial class Form1 : Form { public delegate void delMouse(); public delMouse delMouse1; enter code here
两个虚拟鼠标图像的任务是水平移动并单击目标点。在下面的代码中,是按顺序成功运行的(一个接一个)。 我想编辑这段代码,使之并行工作(两个图像同时工作) mouseimg1 refere=>mouse 1和mouseimg2 refere=>mouse 2
public partial class Form1 : Form
{
public delegate void delMouse();
public delMouse delMouse1; enter code here
public delMouse delMouse2;
private Thread t1, t2;
public Form1()
{
InitializeComponent();
delMouse1 = new delMouse(mouse1);
delMouse2 = new delMouse(mouse2);
}
private void button1_Click(object sender, EventArgs e)
{
t1 = new Thread(new ThreadStart(delMouse1));
t1.Start();
}
private void button2_Click(object sender, EventArgs e)
{
t2 = new Thread(new ThreadStart(delMouse2));
t2.Start();
}
void mouse2()
{
if (this.mouseimg2.InvokeRequired)
{
this.Invoke(delMouse2);
}
else
{
int destinval2 = int.Parse(textBox2.Text);
while (mouseimg2.Location.Y != destinval2)
{
if (mouseimg2.Location.Y == 250)
mouseimg2.Location = new Point(mouseimg2.Location.X, 15);
if (mouseimg2.Location.Y < destinval2)
mouseimg2.Location = new Point(mouseimg2.Location.X, mouseimg2.Location.Y + 1);
else
mouseimg2.Location = new Point(mouseimg2.Location.X, mouseimg2.Location.Y - 1);
}
LeftClick(mouseimg2.Location.X, mouseimg2.Location.Y);
}
}
void mouse1()
{
if (this.mouseimg1.InvokeRequired)
{
this.Invoke(delMouse1);
}
else
{
int destinval1 = int.Parse(textBox1.Text);
while (mouseimg1.Location.Y != destinval1)
{
if (mouseimg1.Location.Y < destinval1)
mouseimg1.Location = new Point(mouseimg1.Location.X, mouseimg1.Location.Y + 1);
else
mouseimg1.Location = new Point(mouseimg1.Location.X, mouseimg1.Location.Y - 1);
}
LeftClick(mouseimg1.Location.X, mouseimg1.Location.Y);
}
}
[DllImport("user32.dll")]
static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
[Flags]
public enum MouseEventFlags
{
LEFTDOWN = 0x00000002,
LEFTUP = 0x00000004,
MIDDLEDOWN = 0x00000020,
MIDDLEUP = 0x00000040,
MOVE = 0x00000001,
ABSOLUTE = 0x00008000,
RIGHTDOWN = 0x00000008,
RIGHTUP = 0x00000010
}
public static void LeftClick(int x, int y)
{
Cursor.Position = new System.Drawing.Point(x, y);
mouse_event((int)(MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
mouse_event((int)(MouseEventFlags.LEFTUP), 0, 0, 0, 0);
}
}
公共部分类表单1:表单
{
公共委托无效delMouse();
public delMouse delMouse1;在此处输入代码
公共鼠标delMouse delMouse2;
私有线程t1,t2;
公共表格1()
{
初始化组件();
delMouse1=新的delMouse(mouse1);
delMouse2=新的delMouse(mouse2);
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
t1=新线程(新线程开始(delMouse1));
t1.Start();
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
t2=新线程(新线程开始(delMouse2));
t2.Start();
}
无效鼠标2()
{
if(this.mouseimg2.invokererequired)
{
this.Invoke(delMouse2);
}
其他的
{
int destinval2=int.Parse(textBox2.Text);
while(mouseimg2.Location.Y!=destinval2)
{
if(mouseimg2.Location.Y==250)
mouseimg2.Location=新点(mouseimg2.Location.X,15);
if(mouseimg2.Location.Y
通常,在Windows中,您不应该从创建窗口的线程以外的线程访问窗口。正如您所发现的,WinForms强制执行此规则 我不太清楚您想要做什么,但是创建两个线程几乎肯定是错误的
看起来有点像多线程但不是的行为通常是使用计时器来完成的,如果这对您有帮助的话。确定异常的可能重复已解决。但我在问题中描述了其他问题:(有帮助吗?我需要同时移动2个picbox(控件)(并行而不是顺序)