From 69f872ced11065127e1d1b928541274b2835a775 Mon Sep 17 00:00:00 2001 From: Chris Cameron Date: Fri, 31 May 2019 13:33:21 -0400 Subject: [PATCH 1/2] feat: Adding features to IcdEnvironment for tracking program initialization state --- ICD.Common.Utils/IcdEnvironment.cs | 38 ++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/ICD.Common.Utils/IcdEnvironment.cs b/ICD.Common.Utils/IcdEnvironment.cs index f0d6a36..1804ed5 100644 --- a/ICD.Common.Utils/IcdEnvironment.cs +++ b/ICD.Common.Utils/IcdEnvironment.cs @@ -1,4 +1,6 @@ using System; +using ICD.Common.Properties; +using ICD.Common.Utils.Extensions; namespace ICD.Common.Utils { @@ -54,5 +56,41 @@ namespace ICD.Common.Utils public static event ProgramStatusCallback OnProgramStatusEvent; public static event EthernetEventCallback OnEthernetEvent; + + /// + /// Raised when the program has completed initialization. + /// + public static event EventHandler OnProgramInitializationComplete; + + private static readonly SafeCriticalSection s_ProgramInitializationSection = new SafeCriticalSection(); + private static bool s_ProgramInitializationComplete; + + /// + /// Returns true if the program has been flagged as completely initialized. + /// + public static bool ProgramIsInitialized { get { return s_ProgramInitializationSection.Execute(() => s_ProgramInitializationComplete); } } + + /// + /// Called by the program entry point to signify that the program initialization is complete. + /// + [PublicAPI] + public static void SetProgramInitializationComplete() + { + s_ProgramInitializationSection.Enter(); + + try + { + if (s_ProgramInitializationComplete) + return; + + s_ProgramInitializationComplete = true; + } + finally + { + s_ProgramInitializationSection.Leave(); + } + + OnProgramInitializationComplete.Raise(null); + } } } From 4953e40f9e04a07a3ca883c758892e0401db5338 Mon Sep 17 00:00:00 2001 From: Chris Cameron Date: Fri, 31 May 2019 13:34:29 -0400 Subject: [PATCH 2/2] docs: Updating changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc7dfc7..bcead0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Added + - Adding features to IcdEnvironment for tracking program initialization state + ## [8.4.0] - 2019-05-15 ### Added - Added GUID utils for generating seeded GUIDs