我想我找到了問題,這裏是一些代碼,簡單的代碼,真正做到:
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;
}
}
}
不介意「核心」類,這並不重要(儘管它聽起來是如此^ _^)
要重現此錯誤,只需p在這一行花邊斷點:
Core.Instance.OnTouchDown(m_screenPosition);
在設備上運行程序,觸摸屏幕,等待幾秒鐘,BOOM!
但是,如果斷點放置在「Core.Instance.OnTouchUp(m_screenPosition)」行上,那麼驚喜!一切安好!!我勒個去!!
我的整個程序運行在一個線程上,所以它不是一個多線程相關的東西。我確實有一個計時器,但該計時器只在「OwnerDrawView」類中調用PostInvalidate(是的,我正在使用Canvas構建遊戲!)
這可能是monodroid中的一個錯誤,但如果有人出現問題再現這個錯誤,那麼請忽略我(我總是一個倒黴的傢伙....)
請將這個答案添加到你原來的問題,因爲現在人們認爲你認爲這個問題有待解決 – TimothyP 2013-02-22 12:33:33