The programmer has no control over when the destructor is called because this is determined by the garbage collector. The garbage collector checks for objects that are no longer being used by the application. If it considers an object eligible for destruction, it calls the destructor (if any) and reclaims the memory used to store the object. Destructors are also called when the program exits.
The links DdoubleD posted should explain it, and more than likely if you're asking that question then you don't need a finalizer. The finalizer/destructor gives you one more chance to free up unmanaged resources so they're not leaked.