I use both of the methods described above. I have my players use one of the email dice roller programs (the Irony one is great for this) and send me 40 or 50 d20 rolls. Those I use for a lot of non-suprise situations where the character knows he is listening at a door but doesn't need to know how well he rolls, I just mark off the next number on the list and tell the character what he needs to know. I also use the "roll a d20" technique a lot for ambushes, spot checks, etc. when the character doesn't know what's up, and just randomly to keep them on their toes and fill them with FUD.

Most of my games are now online as well, which makes it easier to roll those sort of checks for the character without the player knowing a roll is being made and getting paranoid. It helps that my players trust me and understand that I'm not there to screw them over