From 6fb22273d15ed476ccbd3820de6af9bc0deee793 Mon Sep 17 00:00:00 2001 From: Roy Ben-Shabat Date: Mon, 26 Nov 2018 14:19:06 +0200 Subject: Implemented Application Initialization Error and Handling. --- .../PPCApplication/DefaultPPCApplicationManager.cs | 95 ++++++++++++++++------ 1 file changed, 68 insertions(+), 27 deletions(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs') diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs index 714b83dfa..4021d89ef 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/PPCApplication/DefaultPPCApplicationManager.cs @@ -23,6 +23,7 @@ using Tango.SQLExaminer; using System.Data.SqlClient; using Tango.BL.Builders; using Tango.PPC.Common.Threading; +using System.Diagnostics; namespace Tango.PPC.UI.PPCApplication { @@ -63,6 +64,11 @@ namespace Tango.PPC.UI.PPCApplication /// public event EventHandler ContentRendered; + /// + /// Occurs when the application has encountered an error when initializing. + /// + public event EventHandler ApplicationInitializationError; + /// /// Gets a value indicating whether the application is shutting down. /// @@ -125,46 +131,72 @@ namespace Tango.PPC.UI.PPCApplication { PPCSettings settings = null; + bool initialized = false; + await Task.Factory.StartNew(() => { - LogManager.Log("Reading PPC settings..."); - settings = SettingsManager.Default.GetOrCreate(); + try + { + LogManager.Log("Reading PPC settings..."); + settings = SettingsManager.Default.GetOrCreate(); - LogManager.Log(settings.ToJsonString()); + LogManager.Log(settings.ToJsonString()); - LogManager.Log("Reading Core settings..."); - var coreSettings = SettingsManager.Default.GetOrCreate(); + LogManager.Log("Reading Core settings..."); + var coreSettings = SettingsManager.Default.GetOrCreate(); - if (!SettingsManager.Default.IsFileExists()) - { - LogManager.Log("Settings file does not exists. creating..."); - settings.Save(); - } + if (!SettingsManager.Default.IsFileExists()) + { + LogManager.Log("Settings file does not exists. creating..."); + settings.Save(); + } - if (App.StartupArgs.Contains("-update_ok")) - { - LogManager.Log("Application started with '-update_ok' startup arguments. The application has been successfully updated."); - settings.ApplicationState = ApplicationStates.Ready; - settings.Save(); - } + if (App.StartupArgs.Contains("-update_ok")) + { + LogManager.Log("Application started with '-update_ok' startup arguments. The application has been successfully updated."); + settings.ApplicationState = ApplicationStates.Ready; + settings.Save(); + } - if (settings.ApplicationState == ApplicationStates.Ready) + if (settings.ApplicationState == ApplicationStates.Ready) + { + LogManager.Log("Initializing ObservablesStaticCollections..."); + ObservablesStaticCollections.Instance.Initialize(); + LogManager.Log("Loading machine from database..."); + _machine = new MachineBuilder(ObservablesContext.CreateDefault()).SetFirst().WithOrganization().WithConfiguration().Build(); + } + + initialized = true; + } + catch (Exception ex) { - LogManager.Log("Loading machine from database..."); - ObservablesStaticCollections.Instance.Initialize(); - _machine = new MachineBuilder(ObservablesContext.CreateDefault()).SetFirst().WithOrganization().WithConfiguration().Build(); + LogManager.Log(ex, "Application Initialization Error!"); + ApplicationInitializationError?.Invoke(this, ex); + return; } }); - if (settings.ApplicationState == ApplicationStates.PreSetup || settings.ApplicationState == ApplicationStates.SemiSetup) + if (initialized) { - LogManager.Log($"The application is in {settings.ApplicationState} state. database initialization skipped. Invoking setup required event!"); - SetupRequired?.Invoke(this, new EventArgs()); - } - else - { - PostDbInitialize(); + try + { + if (settings.ApplicationState == ApplicationStates.PreSetup || settings.ApplicationState == ApplicationStates.SemiSetup) + { + LogManager.Log($"The application is in {settings.ApplicationState} state. database initialization skipped. Invoking setup required event!"); + SetupRequired?.Invoke(this, new EventArgs()); + } + else + { + PostDbInitialize(); + } + } + catch (Exception ex) + { + LogManager.Log(ex, "Application Post Initialization Error!"); + ApplicationInitializationError?.Invoke(this, ex); + return; + } } } @@ -273,5 +305,14 @@ namespace Tango.PPC.UI.PPCApplication vm.OnApplicationShuttingDown(); } } + + /// + /// Restarts the application. + /// + public void Restart() + { + Process.Start(Application.ResourceAssembly.Location); + Environment.Exit(0); + } } } -- cgit v1.3.1