A stack frame is pushed to contain the scope of Main
even if it is "empty". Also as others have stated, it includes a return address. So yes, you are right.
Anything declared in the scope of a method will be created on the stack (even references to objects), regardless of how long or short-lived they are... as they are guaranteed to live as long as the method scope at most.
Reference types could obviously live longer if the reference is shared outside of the method scope, but the reference within the method scope will still be lost at the end of the method.
You may be looking to try something like implement a Coroutine in C#. Unfortunately the language doesn't offer support for this in its truest sense (Axum used to, because it used linked stacks). Although, that said I've not yet seen it tried using the new C# 5 continuation support.