Я работаю над пользовательским интерфейсом мобильного приложения, имеющего панель с импульсом (для плавной прокрутки), и в настоящее время обновляю пользовательский интерфейс во время плавной прокрутки, используя следующий код:
private void scrollKinetic()
{
while (_curState == States.KineticScroll)
{
// This gets how far the panel will move with the current velocity, then updates the velocity according to the current friction.
var distY = GetDistance(scrVelocity.Y);
var distX = GetDistance(scrVelocity.X);
if (distY + distX <= 0) // Friction will eventually make distX and distY both 0
{
_curState = States.Idle;
Invalidate();
break;
}
// CalculatePosition will move the panel accordingly.
CalculatePosition(distY, scrVelocity.Y, false);
CalculatePosition(distX, scrVelocity.X, true);
Invalidate();
friction++;
Application.DoEvents();
}
}
Как видите, Application.DoEvents();
поднимает свою уродливую голову! Я хочу избавиться от этого, но я не могу придумать способ зациклить и обновить пользовательский интерфейс. Любая помощь / идеи будут превосходны!
Я делаю это на .net CF, но я думаю, что это проблема дизайна, поэтому я не думаю, что платформа будет иметь слишком большое значение.