/// ------------------------------------------------------------------------------------
/// <summary>
/// Initializes the specified application and creates a new main window for it. Also
/// does application-specific cache initialization.
/// </summary>
/// <param name="app">The application</param>
/// <param name="progressDlg">The progress dialog.</param>
/// <returns>True if the application was started successfully, false otherwise</returns>
/// ------------------------------------------------------------------------------------
private static bool InitializeApp(FwApp app, IThreadedProgress progressDlg)
{
using (new DataUpdateMonitor(null, "Application Initialization"))
app.DoApplicationInitialization(progressDlg);
using (new DataUpdateMonitor(null, "Loading Application Settings"))
app.LoadSettings();
using (NonUndoableUnitOfWorkHelper undoHelper = new NonUndoableUnitOfWorkHelper(
s_cache.ServiceLocator.GetInstance<IActionHandler>()))
using (new DataUpdateMonitor(null, "Application Cache Initialization"))
{
try
{
if (!app.InitCacheForApp(progressDlg))
throw new StartupException(Properties.Resources.kstidCacheInitFailure);
}
catch (Exception e)
{
if (e is StartupException)
throw;
throw new StartupException(Properties.Resources.kstidCacheInitFailure, e, true);
}
undoHelper.RollBack = false;
}
if (s_cache.ServiceLocator.GetInstance<IUndoStackManager>().HasUnsavedChanges)
{
if (progressDlg != null)
{
progressDlg.Message = String.Format(Properties.Resources.kstidSaving, s_cache.ProjectId.UiName);
progressDlg.IsIndeterminate = true;
}
s_cache.ServiceLocator.GetInstance<IUndoStackManager>().Save();
if (progressDlg != null)
progressDlg.IsIndeterminate = false;
}
return CreateAndInitNewMainWindow(app, true, null, false);
}