Flash is a downloadable security hole that is on a rapid path to extinction. (I personally hope it dies quickly)
C++ and C# are both popular options, XNA is not a language, its just a framework primarily made to allow anyone to make games using C# for the xbox360 in a way that doesn't compromise the security of the system, it is pretty tied to the xbox360 and thus can't take advantage of modern PC hardware and Microsoft has announced that they won't release any more XNA versions so it will remain as it is today but it does work great if you only need DX9 functionality. SharpDX,SlimDX and OpenTK are up to date options for C# and Unity3D is a pretty solid modern engine that lets you use C# (You could also use UnityScript or Boo with it). There is also MonoGame and Microsoft might possibly release something nice that uses C# for their upcoming console.
C++ is still the most common language to write game engines in(it is probably the least painful language to work with if you need low level access) but its popularity when it comes to writing high level game logic is fading. (Higher level languages such as Python and Lua are gaining popularity in that area quite rapidly).
My recommendation is:
If you're making your own engine or a game from scratch, go with C++ and only add scripting support if you think you'll benefit from it. (For large games you will benefit from having high level scripting support but for smaller games it is quite likely that it will take more effort to add scripting support than you'll save by having it)
If you're making a game using an existing engine, pick an engine with the functionality and platform support you need and use whichever language it supports.