/// ------------------------------------------------------------------------------------ /// <summary> /// Shutdowns the specified application. The application will be disposed of immediately. /// If no other applications are running, then FieldWorks will also be shutdown. /// </summary> /// <param name="app">The application to shut down.</param> /// <param name="fSaveSettings">True to have the application save its settings, /// false otherwise</param> /// ------------------------------------------------------------------------------------ internal static void ShutdownApp(FwApp app, bool fSaveSettings) { if (app != s_teApp && app != s_flexApp) throw new ArgumentException("Application must belong to this FieldWorks", "app"); if (fSaveSettings) app.SaveSettings(); if (s_activeMainWnd != null && app.MainWindows.Contains(s_activeMainWnd)) { // The application that owns the active main window is being disposed. This // means that the window is, most likely, already disposed. s_activeMainWnd = null; } RecordLastAppForProject(); if (app == s_teApp) s_teApp = null; else if (app == s_flexApp) s_flexApp = null; // Make sure we do this after we set the variables to null to keep a race condition // from happening where we want to GetOrCreateApplication() for the app that is // being disposed. try { app.Dispose(); } catch { // continue shutdown even with an exception. It's possible we're shutting down because // of a crash and we don't know what state the application is in. } ExitIfNoAppsRunning(); }