RianBattle
RianBattle

Reputation: 898

My.Application StartUp event

I am rewriting an application for printing shipping labels that we have been using for many years, because over those many years, many programmers have added bits and pieces to it, and it has become harder and harder to maintain.

While considering design choices, I came across catching the application's StartUp event in ApplicationEvents.vb, which I thought would be a good choice for this application because the main form is only displayed if there are more than 10 labels to print at a time (displays a progress bar if so, but mostly it does one label at a time and as such the progress bar isn't desired).

Now, whether this is a good choice I'm not sure, but while playing around with it I have found a need to exit the application from this event if certain criteria aren't met (invalid command line args, network directory not found in expected location, and a few other criteria). I have been unsuccessful in figuring out how to exit from the application if something like the above were to occur. The only thing close I have found is setting the StartupEventArgs.Cancel to True, but the documentation states that this only stops the main form from loading and if set to true should point code on a different processing path.

Is there a "proper" way to exit the application in the StartUp event? I've tried using My.Application.Shutdown which doesn't exist, and RaiseEvent ShutDown() which gives the error "Derived classes cannot raise base class events."

Linked here is the main doc I have been using for research (and the related links on the linked page): https://msdn.microsoft.com/en-us/library/t4zch4d2(VS.80).aspx

Upvotes: 1

Views: 1668

Answers (1)

AStopher
AStopher

Reputation: 4520

You can use End to immediately kill the process, note that:

  • This will prematurely kill the process
  • Any files being written to can become corrupted
  • Any other activity related to the program will be terminated

To protect against file corruption, you could use a subroutine that 'finishes up' and then terminates the program, for example:

Private Sub finishUp()
    [..close files, forms, here..]
    End
End Sub

I did this myself for a gameserver program I made a couple of months ago; the program needed to note in the SQL database the startup and shutdown times. I made it log the shut-down time in a subroutine similar to the one above.

Note that the same subroutine could (and probably should) be used when you need the program to close at any other time.

Upvotes: 1

Related Questions