FreeDrag Gesture buffer clear / IsGestureAvailable buffer clear

I’m currently working on a game that allows the player to draw a vector using GestureType.FreeDrag. The program is supposed to allow the player to touch and drag a line(which is actively displayed while the FreeDrag is active), and when the player releases the drag the game object accelerates in the direction of the created vector. The code works, sort of, however it seems that the phone is buffering the FreeDrag data, and will continue to output the buffered position data after the FreeDrag is completed. If I touch and drag quickly in different directions, the line will continue to be drawn and trace out my movements AFTER I’ve lifted my finger, and finally will disappear and produce the acceleration 1 second or more after GestureType.DragComplete should have switched to true.

Is there a way to clear the FreeDrag buffer and make DragComplete pop immediately upon lifting the touch?

I’m writing the game using Monogame, currently using a Nokia Lumia 820 for testing.

My inputHelper code:

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Input.Touch;
using System;

///


/// Interpret mouse states for input
///
///

public class InputHelper
{
private static Vector2 dragPosition1, initialPosition;
private static int count;
private static bool queudVectorData;

public InputHelper()
{
    TouchPanel.EnabledGestures = GestureType.FreeDrag | GestureType.DragComplete 
    queudVectorData = false;

}

public void Update()
{
    queudVectorData = false;

    if (TouchPanel.IsGestureAvailable)
    {
        GestureSample gs = TouchPanel.ReadGesture();
        switch (gs.GestureType)
        {
        case GestureType.FreeDrag:
            {
                if (count == 0)
                    initialPosition = gs.Position;

                dragPosition1 = gs.Position;
                queudVectorData = true;
                count++;
                break;
            }

        case GestureType.DragComplete:
            {
                count = 0;
                queudVectorData = false;
                break;
            }
        }
    }
}

public bool gestureAvailable
{
    get { return queudVectorData; }
}

public Vector2 getDragPosition1
{
    get { return dragPosition1; }
}

public Vector2 getInitialPosition
{
    get { return initialPosition; }
}

public Vector2 getDistance
{
    get { return dragPosition1 - initialPosition; }
}

}