void SimulateOnMove_DoWork(object sender, DoWorkEventArgs e) { var coordinates = (List <double[]>)((object[])e.Argument)[0]; var changedJoints = (List <Boolean>)((object[])e.Argument)[1]; if (SimulateOnMove.CancellationPending) { e.Cancel = true; return; } if (movingPMKS == null) { movingPMKS = new Simulator(App.main.LinkIDs, App.main.JointTypes, App.main.drivingIndex, coordinates) { MaxSmoothingError = 0.1 }; } else { movingPMKS.AssignPositions(coordinates); } if (SimulateOnMove.CancellationPending) { e.Cancel = true; return; } if (movingPMKS.DegreesOfFreedom != 1) { return; } movingPMKS.FindFullMovement(); App.main.Dispatcher.BeginInvoke(() => UpdateShapesDuringMove(changedJoints, App.main.JointsInfo.Data, e)); }