/// <summary>
 /// Release the deferral for a type if it is held
 /// </summary>
 /// <param name="type"></param>
 private void ReleaseDeferral(UpdateTypes type)
 {
     lock (this)
     {
         if (type == UpdateTypes.LockScreen)
         {
             if (m_lockScreenRefDeferral != null)
             {
                 m_lockScreenRefDeferral.ReleaseRef();
             }
             m_lockScreenRefDeferral = null;
         }
         else if (type == UpdateTypes.Band)
         {
             if (m_bandRefDeferral != null)
             {
                 m_bandRefDeferral.ReleaseRef();
             }
             m_bandRefDeferral = null;
         }
         else
         {
             if (m_desktopRefDeferral != null)
             {
                 m_desktopRefDeferral.ReleaseRef();
             }
             m_desktopRefDeferral = null;
         }
     }
 }
        /// <summary>
        /// Called by the app when the app is suspending
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void OnSuspending_Fired(object sender, SuspendingEventArgs e)
        {
            // Setup a ref deferral for everyone to hold. We also need to setup a clean up action to save the setting
            // when the deferral is done.
            RefCountedDeferral refDeferral = new RefCountedDeferral(e.SuspendingOperation.GetDeferral(), () =>
            {
                // We need to flush the settings here just before we complete the deferal. We need to block this function
                // until the settings are flushed.
                using (AutoResetEvent are = new AutoResetEvent(false))
                {
                    Task.Run(async() =>
                    {
                        // Flush out the local settings
                        await SettingsMan.FlushLocalSettings();
                        are.Set();
                    });
                    are.WaitOne();
                }
            });

            // Add a ref to cover anyone down this call stack.
            refDeferral.AddRef();

            // Make the
            OnSuspendingArgs args = new OnSuspendingArgs()
            {
                RefDeferral = refDeferral
            };

            // Fire the event
            m_onSuspending.Raise(this, args);

            // Release our ref to the deferral
            refDeferral.ReleaseRef();
        }
        /// <summary>
        /// Release the deferral for a type if it is held
        /// </summary>
        /// <param name="type"></param>
        private void ReleaseDeferral(UpdateTypes type)
        {
            lock (this)
            {
                switch (type)
                {
                case UpdateTypes.LockScreen:
                    _lockScreenRefDeferral?.ReleaseRef();
                    _lockScreenRefDeferral = null;
                    break;

                case UpdateTypes.Band:
                    _mBandRefDeferral?.ReleaseRef();
                    _mBandRefDeferral = null;
                    break;

                case UpdateTypes.All:
                    break;

                case UpdateTypes.Desktop:
                    break;

                default:
                    _mDesktopRefDeferral?.ReleaseRef();
                    _mDesktopRefDeferral = null;
                    break;
                }
            }
        }
Beispiel #4
0
 /// <summary>
 /// Releases the deferral if it is held.
 /// </summary>
 private void ReleaseDeferal()
 {
     if (m_refDeferral != null)
     {
         m_refDeferral.ReleaseRef();
     }
     m_refDeferral = null;
 }
Beispiel #5
0
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            // Create the baconit manager
            _mBaconMan = new BaconManager(true);

            // Setup the ref counted deferral
            var refDeferral = new RefCountedDeferral(taskInstance.GetDeferral(), OnDeferralCleanup);

            // Add a ref so everyone in this call is protected
            refDeferral.AddRef();

            // Fire off the update
            await _mBaconMan.BackgroundMan.RunUpdate(refDeferral);

            // After this returns the deferral will call complete unless someone else took a ref on it.
            refDeferral.ReleaseRef();
        }
Beispiel #6
0
 /// <summary>
 /// Releases the deferral if it is held.
 /// </summary>
 private void ReleaseDeferral()
 {
     _refDeferral?.ReleaseRef();
     _refDeferral = null;
 }