2017-11-30 15 views
1

Mit UWP-Anwendung (nur SideLoaded), Ich entwickle eine Überwachungsanwendung mit Serial-Port.ExtendedExecutionForegroundSession: UWP :: Ich war panisch

Beispiel. Ich lese die Temperatur vom Sensor über die serielle Schnittstelle. Ich möchte Monitor für 365 Tage, 24 Stunden zu tun. Die Anwendung muss für alle Zeit arbeiten. Keine Unterbrechung.

6 Monat

für die Entwicklung, verbringe ich 6 Monate .. aber Meine Anwendung war stoppen, wenn ein Minimum reduziert. Beeindruckend. Ja wirklich ? Ich war in Panik .... Ich brauche deine Hilfe.

im Debugging-Modus, alles hat gut funktioniert. Auch wenn minimiert, Alle Hintergrundaufgabe, warten Aufgabe funktioniert, ohne zu stoppen. aber Release-Modus = seitengeladene Anwendung wurde gestoppt, besonders Gerät lesen/schreiben.

Ich habe unten Code hinzugefügt, um dies zu vermeiden. Aber das Problem wurde nicht gelöst.

// This is Caliburn.micro , UWP framework. 
protected override async void OnLaunched(LaunchActivatedEventArgs e) 
    { 
     var newSession = new ExtendedExecutionForegroundSession(); 
     newSession.Reason = ExtendedExecutionForegroundReason.Unconstrained; 
     newSession.Description = "Long Running Processing"; 
     newSession.Revoked += SessionRevoked; 
     var result = await newSession.RequestExtensionAsync(); 
     switch (result) 
     { 
      case ExtendedExecutionForegroundResult.Allowed: 
        Debug.WriteLine($"ExtendedExecutionForegroundResult.Allowed"); 
       break; 

      default: 
      case ExtendedExecutionForegroundResult.Denied: 
       Debug.WriteLine($"ExtendedExecutionForegroundResult.Denied"); 
       break; 
     } 


private void SessionRevoked(object sender, ExtendedExecutionForegroundRevokedEventArgs args) 
    { 
     Debug.WriteLine($"ExtendedExecutionForegroundResult :: SessionRevoked"); 
    } 

und ist Package.appxmanifest hier.

<?xml version="1.0" encoding="utf-8"?> 
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" 
    xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" 
    xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" 
    xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" 
    xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" 
    IgnorableNamespaces="uap mp rescap"> 
..... 

<Capabilities> 
<Capability Name="internetClient" /> 
<rescap:Capability Name="extendedBackgroundTaskTime"/> 
<rescap:Capability Name="extendedExecutionUnconstrained"/> 
<DeviceCapability Name="serialcommunication"> 
    <Device Id="any"> 
    <Function Type="name:serialPort" /> 
    </Device> 
</DeviceCapability> 
</Capabilities> 
</Package> 

Hier sind weitere Informationen.

  • Alles kompilieren und bauen ist Erfolg.
  • im Debug-Modus, alle Aufgabe (Hintergrund erwarten) funktioniert. Kein Halten.
  • Ausgegangen als seitengeladene Anwendung, funktioniert nicht während "Minimiert" ...
  • im Freigabemodus (auf VIsual Studio). Es hört nicht auf.
  • Desktop (Notebook-PC) mit Wechselstrom. Nicht Akku ..
  • Windows 10 Einstellung. "Hintergrund App" = ON für meine installierte sidegeladene Anwendung (ich bestätigt).

Bitte helfen!

Update 1:

Ich habe versucht, diese gleiche code..but zu verwenden. Nicht ...

var extendedExecutionSession = new ExtendedExecutionSession(); 
     extendedExecutionSession.Reason = ExtendedExecutionReason.Unspecified; 
     var extendedExecutionResult = await extendedExecutionSession.RequestExtensionAsync(); 
     if (extendedExecutionResult != ExtendedExecutionResult.Allowed) 
     { 
      //extended execution session revoked 
      extendedExecutionSession.Dispose(); 
      extendedExecutionSession = null; 
     } 

Welche soll ich verwenden?

  • ExtendedExecutionForegroundSession
  • ExtendedExecutionSession
+0

Können Sie bitte klären, was genau fehlschlägt, wenn Sie versuchen, die Extended Execution Session zu verwenden? a) Der Antrag auf EE wird abgelehnt? (b) Anfrage ist erlaubt, aber die App wird immer noch ausgesetzt, wenn sie minimiert wird? (c) App wird nicht gesperrt, aber bestimmte APIs funktionieren nicht mehr, wenn sie minimiert werden? (d) etwas anderes? –

+0

Wow .. Ich lernte jetzt die Funktion Suspend zu simulieren! und ich könnte Fehlermeldung nach dem Aussetzen erhalten. Es ist mit meinem Gerät verbunden! und ich könnte das Problem lösen! Vielen Dank . Hauptursache war. Meine serielle Bibliothek hat SuspendEvent. Es hat die Geräteverbindung beendet !! haha Entschuldigung . und Danke, dass du geholfen hast! –

+0

Ich poste eine andere Frage ..: https://Stackoverflow.com/questions/47586768/uwp-suspend-disable-with-xtendedexecutionssession-or-ontendodedexecutionforeground –

Antwort

2

Wenn mit Debugger angebracht, minimiert app, bis sie manuell in diesen Zustand von VS mit dieser Taste Suspend button gesendete nicht läuft nicht ausgesetzt. Es besteht also die Möglichkeit, dass Sie die App während des Tests im Debug-Modus ordnungsgemäß ausgeführt haben, während sie minimiert wurde, auch ohne erweiterte Ausführungserlaubnis.

Folglich sollten Sie als Erstes sicherstellen, dass Ihre App tatsächlich eine erweiterte Ausführungssitzung starten kann. Ich sehe, dass Sie Debug.WriteLine() verwenden, um das Ergebnis der erweiterten Ausführungssitzungsanforderung auszugeben, aber das wird im Freigabemodus nicht funktionieren. Es sei denn, Sie einige 3rd-Party-Lösung verwenden möchten (da es keine System.Diagnostics.Trace für UWP ist) empfehle ich das Senden Toast:

protected override async void OnLaunched(LaunchActivatedEventArgs e) 
    { 
     ... 
     var result = await newSession.RequestExtensionAsync(); 
     switch (result) 
     { 
      case ExtendedExecutionForegroundResult.Allowed: 
       ShowToast("Extended execution session request: allowed"); 
       break; 

      default: 
      case ExtendedExecutionForegroundResult.Denied: 
       ShowToast("Extended execution session request: denied"); 
       break; 
     } 
     ... 
    } 

    private void SessionRevoked(object sender, ExtendedExecutionForegroundRevokedEventArgs args) 
    { 
     ShowToast("Extended execution session revoked: " + args.Reason.ToString()); 
    } 

    private void ShowToast(string text) 
    { 
     var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01); 
     var toastTextElements = toastXml.GetElementsByTagName("text"); 
     toastTextElements[0].InnerText = text; 
     ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml)); 
    } 

    // small delay in suspended deferral is needed to buy enough time to send toast from the revoked event 
    private async void OnSuspending(object sender, SuspendingEventArgs e) 
    { 
     var deferral = e.SuspendingOperation.GetDeferral(); 
     await Task.Delay(3000); 
     deferral.Complete(); 
    } 

Bitte aktualisieren Sie Ihre Frage mit den Ergebnissen ohne Debugger für erweiterte Ausführungssitzungsanforderung im Release-Modus überprüft und geben Sie detaillierte Informationen über seinen Widerruf an.

Verwenden Sie ExtendedExecutionForegroundSession.

+0

Wow .. Ich lernte jetzt die Funktion zu Suspend zu simulieren! und ich könnte Fehlermeldung nach dem Aussetzen erhalten. Es ist mit meinem Gerät verbunden! und ich könnte das Problem lösen! Vielen Dank . Hauptursache war. Meine serielle Bibliothek hat SuspendEvent. Es hat die Geräteverbindung beendet !! haha Entschuldigung . und Danke, dass du geholfen hast! –

+0

@ Kazuhiko Froh, um Hilfe zu sein! –

+0

Ich poste eine andere Frage: Wenn Sie helfen können, bin ich froh: https://StackOverflow.com/Questions/47586768/uwp-suspend-disable-with-extendedexecutionssession-or-DEtdedexecutionforeground –