Ejemplo n.º 1
0
        private async void HandleSuspending(object sender, SuspendingEventArgs e)
        {
            DebugWrite();

            // one, global deferral
            var deferral = e.SuspendingOperation.GetDeferral();

            using (var session = new Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession
            {
                Description = this.GetType().ToString(),
                Reason = Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionReason.SavingData
            })
            {
                try
                {
                    //allow only main view NavigationService as others won't be able to use Dispatcher and processing will stuck
                    var services = WindowWrapper.ActiveWrappers.SelectMany(x => x.NavigationServices).Where(x => x.IsInMainView);
                    foreach (INavigationService nav in services)
                    {
                        // date the cache (which marks the date/time it was suspended)
                        nav.FrameFacade.SetFrameState(CacheDateKey, DateTime.Now.ToString());
                        // call view model suspend (OnNavigatedfrom)
                        DebugWrite($"Nav.FrameId:{nav.FrameFacade.FrameId}", caller: nameof(nav.SuspendingAsync));
                        await(nav as INavigationService).GetDispatcherWrapper().DispatchAsync(async() => await nav.SuspendingAsync());
                    }

                    // call system-level suspend
                    DebugWrite($"Calling. OnSuspendingAsync {(OriginalActivatedArgs as LaunchActivatedEventArgs)?.PrelaunchActivated ?? false}", caller: nameof(OnSuspendingAsync));
                    await OnSuspendingAsync(sender, e, (OriginalActivatedArgs as LaunchActivatedEventArgs)?.PrelaunchActivated ?? false);
                }
                catch { /* do nothing */ }
                finally { deferral.Complete(); }
            }
        }
Ejemplo n.º 2
0
            public async Task AutoSuspendAllFramesAsync(object sender, SuspendingEventArgs e, bool autoExtendExecutionSession)
            {
                DebugWrite($"autoExtendExecutionSession: {autoExtendExecutionSession}");

                if (autoExtendExecutionSession)
                {
                    using (var session = new Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession
                    {
                        Description = GetType().ToString(),
                        Reason = Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionReason.SavingData
                    })
                    {
                        await SuspendAllFramesAsync();
                    }
                }
                else
                {
                    await SuspendAllFramesAsync();
                }
            }
 public async Task AutoSuspendAllFramesAsync(BootStrapper bootstrapper, SuspendingEventArgs e)
 {
     if (!bootstrapper.AutoSuspendAllFrames)
     {
         return;
     }
     if (bootstrapper.AutoExtendExecutionSession)
     {
         using (var session = new Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession
         {
             Description = GetType().ToString(),
             Reason = Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionReason.SavingData
         })
         {
             await SuspendAllFramesAsync();
         }
     }
     else
     {
         await SuspendAllFramesAsync();
     }
 }
Ejemplo n.º 4
0
        private void Loaded()
        {
            DebugWrite();
            Current = this;

            // Hook up keyboard and mouse Back handler
            var KeyboardService = Services.KeyboardService.KeyboardService.Instance;

            KeyboardService.AfterBackGesture = () =>
            {
                DebugWrite(caller: nameof(KeyboardService.AfterBackGesture));

                var handled = false;
                RaiseBackRequested(ref handled);
            };

            KeyboardService.AfterForwardGesture = () =>
            {
                DebugWrite(caller: nameof(KeyboardService.AfterForwardGesture));

                RaiseForwardRequested();
            };

            // Hook up the default Back handler
            SystemNavigationManager.GetForCurrentView().BackRequested += BackHandler;

            Resuming += async(s, e) =>
            {
                DebugWrite(caller: nameof(Resuming));

                if ((OriginalActivatedArgs as LaunchActivatedEventArgs)?.PrelaunchActivated ?? false)
                {
                    OnResuming(s, e, AppExecutionState.Prelaunch);
                    if (!_HasOnStartAsync)
                    {
                        DebugWrite("From OnResume(PreLaunch)", caller: nameof(OnStartAsync));
                        _HasOnStartAsync = true;
                        await OnStartAsync(StartKind.Launch, OriginalActivatedArgs);
                    }
                    Window.Current.Activate();
                }
                else
                {
                    OnResuming(s, e, AppExecutionState.Suspended);
                }
            };

            Suspending += async(s, e) =>
            {
                DebugWrite(caller: nameof(Suspending));

                // one, global deferral
                var deferral = e.SuspendingOperation.GetDeferral();
                using (var session = new Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession
                {
                    Description = this.GetType().ToString(),
                    Reason = Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionReason.SavingData
                })
                {
                    try
                    {
                        foreach (INavigationService nav in WindowWrapper.ActiveWrappers.SelectMany(x => x.NavigationServices))
                        {
                            // date the cache (which marks the date/time it was suspended)
                            nav.FrameFacade.SetFrameState(CacheDateKey, DateTime.Now.ToString());
                            // call view model suspend (OnNavigatedfrom)
                            DebugWrite($"Nav:{nav}", caller: nameof(nav.SuspendingAsync));
                            await(nav as INavigationService).Dispatcher.DispatchAsync(async() => await nav.SuspendingAsync());
                        }

                        // call system-level suspend
                        DebugWrite($"Calling. Prelaunch {(OriginalActivatedArgs as LaunchActivatedEventArgs)?.PrelaunchActivated ?? false}", caller: nameof(OnSuspendingAsync));
                        await OnSuspendingAsync(s, e, (OriginalActivatedArgs as LaunchActivatedEventArgs)?.PrelaunchActivated ?? false);
                    }
                    catch { /* do nothing */ }
                    finally { deferral.Complete(); }
                }
            };
        }