私は問題を見つけたと思います、ここにいくつかのコード、単純なコードがあります、本当に:
class OwnerDrawView : View
{
PointF m_screenPosition;
public OwnerDrawView(Context context)
: base(context)
{
this.Touch += new EventHandler<TouchEventArgs>(OwnerDrawView_Touch);
this.SetWillNotDraw(false);
}
protected override void OnDraw(Canvas canvas)
{
Core.Instance.OnDraw(canvas);
base.OnDraw(canvas);
}
void OwnerDrawView_Touch(object sender, View.TouchEventArgs e)
{
m_screenPosition = new PointF(e.Event.GetX(), e.Event.GetY());
switch (e.Event.Action) {
case MotionEventActions.Down:
Core.Instance.OnTouchDown(m_screenPosition);
break;
case MotionEventActions.Move:
Core.Instance.OnTouchMove(m_screenPosition);
break;
case MotionEventActions.Up:
Core.Instance.OnTouchUp(m_screenPosition);
break;
}
}
}
「Core」クラスは気にしないでください。ここでは重要ではありません(ただし、^ _ ^のように聞こえます)
。このエラーを再現するには、次の行にブレークポイントを配置します。
Core.Instance.OnTouchDown(m_screenPosition);
デバイスでプログラムを実行し、画面をタッチして、数秒待ってください、ブーム!
ただし、ブレークポイントが「Core.Instance.OnTouchUp(m_screenPosition)」行に配置されている場合は、サプライズ!すべて順調!!なんてこったい!!
私のプログラム全体はシングルスレッドで実行されるので、マルチスレッド関連のものではありません。私はタイマーを持っていますが、そのタイマーは「OwnerDrawView」クラスでPostInvalidateを呼び出すだけです(はい!Canvasを使用してゲームを構築しています!)
これはおそらくmonodroidのバグですが、誰かがこのバグを再現するのに問題がある場合は、私を無視してください(私はいつも不運な男です...)