Note reloading your form only simulates a restart, and it doesn't carry with it
all of the features of an actual process restart. If you truly need to restart
your
application, then you should probably take a good hard look at Process.Start
and the Environment class. You'll be able to get the arguments your application
was started with and pass those to a new instance of your app.
If you need synchronization between unloading/loading, you can use a Mutex
to allow your existing application to shut down and release resources required
for the second instance to completely load. A great example would be a
listening port, since two apps can't share that sort of resource.