加速度センサーとInvokeについての覚書
<はじめに>
WP7で加速度センサーを使ってみようと思います。Accelerometerのインスタンスを生成すると、CurrentValueChangedイベントとReadingChangedイベントがあるのですが、「ReadingChangedは古いよ!」って注意されるのでCurrentValueChangedにて実装します。
<プログラム>
public partial class MainPage : PhoneApplicationPage { private Accelerometer acceleroter; /// <summary> /// コンストラクタ /// </summary> public MainPage() { InitializeComponent(); acceleroter = new Accelerometer(); acceleroter.TimeBetweenUpdates = TimeSpan.FromMilliseconds(1000); acceleroter.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(acceleroter_CurrentValueChanged); acceleroter.Start(); } /// <summary> /// acceleroter変化時に呼び出されるメソッド /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void acceleroter_CurrentValueChanged(object sender, SensorReadingEventArgs<AccelerometerReading> e) { try { AccelerometerReading accelerometer = e.SensorReading; Vector3 acceleration = accelerometer.Acceleration; Debug.WriteLine("X:" + acceleration.X.ToString() + " Y:" + acceleration.Y.ToString() + " Z:" + acceleration.Z.ToString()); } catch (Exception ex) { Dispatcher.BeginInvoke(() => this.textBlock1.Text = ex.Message); } } }
<まとめ>
特にこれと言って難しいところはありませんでしたが、しいて挙げるとすればAccelerometerのイベントは別スレッドで発生するようなので、Invokeを使ってUIスレッドに処理を渡すところは気をつけないといけません。