private async Task PIDParametricTune(Action<double[]> callback, double[] _rModelPara, enumPIDOptimType PIDOptimIndex_para, enumModelType modelType_para) { matlab.Execute(@"cd 'C:\Users\msa\Downloads\Quadcopter development\Codings\MATLAB\external\'"); double[] _cModelPara = new double[4]; System.Array rModelPara = new double[4]; System.Array cModelPara = new double[4]; _rModelPara.CopyTo(rModelPara, 0); _cModelPara.CopyTo(cModelPara, 0); try { matlab.PutFullMatrix("Model_parameters", "base", rModelPara, cModelPara); } catch (System.Runtime.InteropServices.COMException err) { } try { matlab.PutWorkspaceData("ModelTypeIndex", "base", (int)modelType_para); } catch (System.Runtime.InteropServices.COMException err) { } try { matlab.PutWorkspaceData("FitTypeIndex", "base", (int)PIDOptimIndex_para); } catch (System.Runtime.InteropServices.COMException err) { } matlab.Execute("PIDOptim"); bool IsDone = false; while (!IsDone) { string chkFilePath = @"C:\Users\msa\Downloads\Quadcopter development\Codings\MATLAB\external\donePIDOptim.txt"; IsDone = File.Exists(chkFilePath); System.Threading.Thread.Sleep(100); } System.Array rPIDvals = new double[3]; System.Array cPIDvals = new double[3]; matlab.GetFullMatrix("results", "global", ref rPIDvals, ref cPIDvals); double[] _rPIDvals = new double[3]; double[] _cPIDvals = new double[3]; rPIDvals.CopyTo(_rPIDvals, 0); rPIDvals.CopyTo(_cPIDvals, 0); // Invoke the callback method asynchronously. await Task.Run(() => MLPIDCalculationDone(_rPIDvals)); }
public async void asyncPIDParametricTune(double[] _rModelPara, enumPIDOptimType PIDOptimIndex_para, enumModelType modelType_para) { await PIDParametricTune(MLPIDCalculationDone, _rModelPara, PIDOptimIndex_para, modelType_para); }