I'm very interested in your solution to ShellExecute printing out of order solution.
I'm stump at work and would highly appricate if you can share the piece of code where you mention
Wait for document to show up in printqueue Wait for spooling to complete (PrintSystemJobInfo.IsSpooling == false status in .NET)