Trying to close all opened forms in visual basic

Klink45 picture Klink45 · Jan 18, 2016 · Viewed 16.6k times · Source

I want it so when my button is clicked, I exit my application. I tried a simple for loop:

Private Sub CloseAllToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CloseAllToolStripMenuItem.Click
    For Each Form In My.Application.OpenForms
        Form.Close()
    Next
End Sub

But after closing all forms besides the form with this button on it, I get this error:

An unhandled exception of type 'System.InvalidOperationException' occurred in mscorlib.dll Additional information: Collection was modified; enumeration operation may not execute.

I believe this is because I close the form executing the code before the loop can go to the next form. If this is the case, how can I make it so my loop finishes once the last form is closed? Can I even do that?

Answer

Reza Aghaei picture Reza Aghaei · Jan 18, 2016

Close all but current form:

My.Application.OpenForms.Cast(Of Form)() _
              .Except({Me}) _
              .ToList() _
              .ForEach(Sub(form) form.Close())

Close application normally:

Application.Exit()

Force application to exit:

Environment.Exit(1)