Пример #1
0
        /// <summary>Panel Dataが更新された際に実行されるように登録するメソッド</summary>
        /// <param name="sender">この関数の呼び出し元(通知するかは呼び出し元の実装次第)</param>
        /// <param name="e">実行に関連する情報が格納された引数</param>
        private void SML_SMC_PanelDChanged(object sender, TR.ValueChangedEventArgs <int[]> e)
        {
            if (e.OldValue.Length >= ArrayElems.Length && e.NewValue.Length >= ArrayElems.Length)             //配列長は新旧ともArrayElems以上に長い.
            {
                Parallel.For(0, ArrayElems.Length, (i) =>
                {
                    if (e.OldValue[i] != e.NewValue[i])                    //値の更新がある
                    {
                        TBTextChanger(i, e.NewValue[i]);                   //表示更新
                    }
                    //更新がなければ何もしない.
                });
            }
            else if (e.NewValue.Length == e.OldValue.Length)             //新旧ともPanelElem未満の配列長であり, 配列長は同じ
            {
                Parallel.For(0, e.NewValue.Length, (i) =>
                {
                    if (e.OldValue[i] != e.NewValue[i])                    //値の更新がある
                    {
                        TBTextChanger(i, e.NewValue[i]);                   //表示更新
                    }
                    //更新がなければ何もしない.
                });

                //配列長が短くなってないなら, 残りのArrayElemsは初期状態のままなはず.
            }
            else if (e.NewValue.Length < e.OldValue.Length)             //新版の配列長が短い <=> 新版がPanelElemの配列長未満になり, 初期化する領域がある
            {
                Parallel.For(0, e.NewValue.Length, (i) =>
                {
                    if (e.OldValue[i] != e.NewValue[i])                    //値の更新がある
                    {
                        TBTextChanger(i, e.NewValue[i]);                   //表示更新
                    }
                    //更新がなければ何もしない.
                });

                //配列が短くなって初期化する必要が出てきた部分
                Parallel.For(e.NewValue.Length, Math.Min(ArrayElems.Length, e.OldValue.Length), (i) =>
                {
                    ArrayElems[i].Text = "0";
                });
            }
            else             //新版の配列が長い <=> 新版がPanelElemの配列長をオーバーし, 比較なしに値を入れる領域がある
            {
                Parallel.For(0, e.OldValue.Length, (i) =>
                {
                    if (e.OldValue[i] != e.NewValue[i])                    //値の更新がある
                    {
                        TBTextChanger(i, e.NewValue[i]);                   //表示更新
                    }
                    //更新がなければ何もしない.
                });

                Parallel.For(e.OldValue.Length, Math.Min(e.NewValue.Length, ArrayElems.Length), (i) =>
                {
                    ArrayElems[i].Text = e.NewValue[i].ToString();                    //表示設定
                });
            }
        }
Пример #2
0
        /// <summary>BIDS Shared Memory Basic Dataが更新された際に実行されるように登録するメソッド</summary>
        /// <param name="sender">この関数の呼び出し元(通知するかは呼び出し元の実装次第)</param>
        /// <param name="e">実行に関連する情報が格納された引数</param>
        private void SML_SMC_BSMDChanged(object sender, TR.ValueChangedEventArgs <BIDSSharedMemoryData> e)
        {
            //MRPresというローカル変数に, 「処理完了後のMR圧(kPa)」を記録する処理
            float MRPres = e.NewValue.StateData.MR;

            //Speed_Oldというローカル変数に, 「処理実行前の速度(km/h)」を記録する処理
            float Speed_Old = e.OldValue.StateData.V;

            //上記二つに特に意味があるわけではない.

            bsmd2b.BSMD = e.NewValue;            //表示データの更新
        }
Пример #3
0
 /// <summary>openBVE Dataが更新された際に実行されるように登録するメソッド</summary>
 /// <param name="sender">この関数の呼び出し元(通知するかは呼び出し元の実装次第)</param>
 /// <param name="e">実行に関連する情報が格納された引数</param>
 private void SML_SMC_OpenDChanged(object sender, TR.ValueChangedEventArgs <OpenD> e) => OtB.OD = e.NewValue;