コード例 #1
0
        public bool UnInitialize()
        {
            TracerHelper.TraceEntry();

            SortedList <int, List <PlatformComponent> > componentsByLevel;

            lock (this)
            {
                componentsByLevel = GetComponentsByLevel(_components.Values);
            }

            // Un initialize higher level components first.
            // Make sure component uninit is outside of locks, to evade dead locks.
            for (int i = 0; i < componentsByLevel.Keys.Count; i++)
            {
                int level = componentsByLevel.Keys[i];
                foreach (PlatformComponent component in componentsByLevel[level])
                {
                    UnInitializeComponent(component);
                }
            }

            lock (this)
            {
                // Store additional.
                _serializationData.Clear();
                _serializationData.AddValue("diagnosticsMode", _settings.DiagnosticsMode);
                _serializationData.AddValue("uiSerializationInfo", _uiSerializationInfo);
                _serializationData.AddValue("componentSpecificSerializationInfo", _componentSpecificSerializationInfo);

                PersistenceHelper.UpdateToDB <Platform>(this, null);

                _components.Clear();
                this.Arbiter.Dispose();
            }

            return(true);
        }