/// <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(); //表示設定 }); } }
/// <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; //表示データの更新 }
/// <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;