/// <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();
                }));
        }
Exemplo n.º 2
0
        /// <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();
                }));
        }