The function you are looking for is TouchPanel.GetState
. It is a simple matter of calling this function at 60Hz.
To get 60Hz you could set Game.TargetElapsedTime
to 1/60th of a second. This will give you two updates to every one draw (according to Shawn Hargreaves' post here) assuming you are VSyncing at 30FPS.
If you still want your game state updates to run at 30FPS (just doing touch input at 60FPS), then you could put those updates on a different thread. Start an update going on that thread on the first call to Game.Update
, and wait for it to finish on the second one, and so on.
(You should note that normally XNA input must be done on the main thread (source). I assume this applies to Phone and to touch input.)
Alternately you could replace the Game
class's timing yourself entirely (calling GraphicsDevice.Present
yourself). It's not easy to do, but it's possible. A good place to start is to look at the Game
class in Reflector.
(Disclaimer: I haven't tried any actual Phone-based development yet, so there may be some Phone-related gotchas I am unaware of.)