public override bool SetCoordiPos(double X, double Y, double Theta) { bool IsOk = true; IsOk = IsOk && SetAixsPos(AxisEnum.Coordi3_X1, X); System.Threading.Thread.Sleep(10); IsOk = IsOk && SetAixsPos(AxisEnum.Coordi3_Y1, Y); System.Threading.Thread.Sleep(10); IsOk = IsOk && SetAixsPos(AxisEnum.Coordi3_Theta1, Theta); System.Threading.Thread.Sleep(10); if (MoveEvent == null) { MoveEvent = new ManualResetEventSlim(); } MoveEvent.Reset(); double NowX = 0, NowY = 0, NowTheta = 0; Task.Factory.StartNew(new Action(() => { while (IsOk) { GetAxisPos(AxisEnum.Coordi3_X, out NowX); System.Threading.Thread.Sleep(10); GetAxisPos(AxisEnum.Coordi3_Y, out NowY); System.Threading.Thread.Sleep(10); GetAxisPos(AxisEnum.Coordi3_Theta, out NowTheta); Thread.Sleep(10); if (Math.Abs(NowX - X) < 0.01 && Math.Abs(NowY - Y) < 0.01 && Math.Abs(NowTheta - Theta) < 0.01) { MoveEvent.Set(); } } })); if (MoveEvent.Wait(5000)) { IsOk = false; return(true); } else { IsOk = false; return(false); } }