Here is another approach with resource hogging

(or however you call it)
Save the time each 10 tracknodes and then simply subtract the times from each other at a specific node ^^
public override void setNode(int lap, int node)
{
myLap = lap;
myNode = node;
if (node % 10 == 0)
{
nodeTimes[string.Format("lap{0:0}node{1:0}", lap, node)] = DateTime.Now;
}
}
public override bool hasNodeTime(int lap, int node)
{
return nodeTimes.ContainsKey(string.Format("lap{0:0}node{1:0}", lap, node));
}
public override DateTime getNodeTime(int lap, int node)
{
if (hasNodeTime(lap, node))
{
return (DateTime)nodeTimes[string.Format("lap{0:0}node{1:0}", lap, node)];
}
else
{
return new DateTime(0);
}
}
// Distance
if (playerF.hasNodeTime(((RaceDriver)bean.Player).lap, ((RaceDriver)bean.Player).node) && bean.Player.hasNodeTime(((RaceDriver)bean.Player).lap, ((RaceDriver)bean.Player).node))
{
DateTime playerT = bean.Player.getNodeTime(((RaceDriver)bean.Player).lap, ((RaceDriver)bean.Player).node);
DateTime playerFT = playerF.getNodeTime(((RaceDriver)bean.Player).lap, ((RaceDriver)bean.Player).node);
TimeSpan dist = playerT.Subtract(playerFT);
this.lcdDistF.Text = string.Format("{0:00}:{1:00}:{2:000}", dist.Minutes, dist.Seconds, dist.Milliseconds);
}
With playerF being the "front" one and players are sorted by race positions.
That's from the Live for G15 app.