/// <summary> /// 計算スレッド関数 /// </summary> private void solverThreadProc() { // 各波長の結果出力時に呼ばれるコールバックの定義 ParameterizedInvokeDelegate eachDoneCallback = new ParameterizedInvokeDelegate(delegate(Object[] args) { // ポストプロセッサへ結果読み込み(freqNo: -1は最後の結果を読み込み) PostPro.LoadOutput(FemOutputDatFilePath, -1); // 結果をグラフィック表示 this.Invoke(new InvokeDelegate(delegate() { PostPro.SetOutputToGui( FemOutputDatFilePath, CadPanel, FValuePanel, FValueLegendPanel, labelFreqValue, SMatChart, BetaChart, EigenVecChart, true); })); // 描画イベントを処理させる Application.DoEvents(); }); // 解析実行 Solver.Run(FemOutputDatFilePath, this, eachDoneCallback); // 解析終了したので[計算開始]ボタンを有効化 this.Invoke(new InvokeDelegate(delegate() { //[計算開始]ボタンを有効化 setCtrlEnable(true); btnCalc.Text = "計算開始"; // 周波数インデックスを最後にセット //BUGFIX //周波数番号は1起点なので、件数 = 最後の番号となる //計算失敗の場合、上記は成り立たない int firstFreqNo; int lastFreqNo; int cnt = PostPro.GetCalculatedFreqCnt(FemOutputDatFilePath, out firstFreqNo, out lastFreqNo); FreqNo = lastFreqNo; // 周波数ボタンの有効・無効化 setupBtnFreqEnable(); // Cadパネル再描画(メッシュを消す) //CadPanel.Invalidate(); // 等高線図再描画(メッシュを消す) //FValuePanel.Invalidate(); })); }
/// <summary> /// 計算スレッド関数 /// </summary> /// <param name="param1"></param> private void solverThreadProc(object param1) { object[] paramList = (object[])param1; bool allFlg = (bool)paramList[0]; bool appendFileFlg = (bool)paramList[1]; // 各波長の結果出力時に呼ばれるコールバックの定義 ParameterizedInvokeDelegate eachDoneCallback = new ParameterizedInvokeDelegate(delegate(Object[] args) { // ポストプロセッサへ結果読み込み(freqNo: -1は最後の結果を読み込み) PostPro.LoadOutput(FemOutputDatFilePath, -1); // 結果をグラフィック表示 this.Invoke(new InvokeDelegate(delegate() { PostPro.SetOutputToGui( FemOutputDatFilePath, CadPanel, FValuePanel, FValueLegendPanel, labelFreqValue, SMatChart, BetaChart, EigenVecChart, true); })); // 描画イベントを処理させる Application.DoEvents(); // 固有モード分布表示 if (EigenFValueFrm != null && EigenFValueFrm.Visible) { this.Invoke(new InvokeDelegate(delegate() { EigenFValueFrm.FreqNo = -1; })); // 描画イベントを処理させる Application.DoEvents(); } }); if (!allFlg) { // 対象周波数1点だけ計算する // 解析実行 Solver.RunAtOneFreq(FemOutputDatFilePath, FreqNo, this, eachDoneCallback, appendFileFlg); } else { // 解析実行 Solver.Run(FemOutputDatFilePath, this, eachDoneCallback); } // 解析終了したので[計算開始]ボタンを有効化 this.Invoke(new InvokeDelegate(delegate() { //[計算開始]ボタンを有効化 setCtrlEnable(true); btnCalc.Text = "計算開始"; if (allFlg) { // 周波数インデックスを最後にセット //BUGFIX //周波数番号は1起点なので、件数 = 最後の番号となる //計算失敗の場合、上記は成り立たない int firstFreqNo; int lastFreqNo; int cnt = PostPro.GetCalculatedFreqCnt(FemOutputDatFilePath, out firstFreqNo, out lastFreqNo); FreqNo = lastFreqNo; // 周波数ボタンの有効・無効化 setupBtnFreqEnable(); } // Cadパネル再描画(メッシュを消す) //CadPanel.Invalidate(); // 等高線図再描画(メッシュを消す) //FValuePanel.Invalidate(); })); }