Programs with animation, such as screensavers and games, tend to run in a main loop, using as much CPU as possible to render as many FPS as possible. In many ways they're easier to program than event-driven programs since your program never goes idle, and never leaves the loop.
Basically you loop until a boolean contition changes, then the program ends. Somewhere in your loop you check for, say, a keypress to set that condition and the loop will finish. Rendering graphics depends whether you're using GDI+ or DirectX, but either way you will usually draw a frame every iteration of the loop.
To do animation without DirectX, you use the GDI+ drawing methods in the System.Drawing namespace. Combined with the Windows Forms double buffering, this can produce a nice result. Every iteration of the loop you call Invalidate() then Application.DoEvents() and your main form gets repainted, and everything is drawn where it should be.