2017-03-16 6 views
0

Mit den unten Referenzen läuft, habe ich versucht, eine Hintergrundaufgabe in einer UWP App zu machen:UWP Timer Hintergrund Aufgabe nicht

https://docs.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task

https://docs.microsoft.com/en-us/windows/uwp/launch-resume/run-a-background-task-on-a-timer-

https://www.youtube.com/watch?v=H18HrUin46I

Alles funktioniert wie Wird im YouTube-Video angezeigt, wenn die Hintergrundaufgabe im Debug-Modus ausgeführt wird, aber die Debug/Release-Version der App die 15-minütige Hintergrundaufgabe nicht selbst startet. Hier ist der Code:

MainPage.xaml.cs

using TimerBG; 

bool taskRegistered = false; 

foreach (var task in BackgroundTaskRegistration.AllTasks) 
{ 
    if (task.Value.Name == nameof(BG)) 
    { 
     task.Value.Unregister(true); 
    } 
} 
if(!taskRegistered) 
{ 
    Setup(); 
} 

public async static void Setup() 
{ 
    BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync(); 

    var builder = new BackgroundTaskBuilder(); 
    builder.Name = nameof(BG); 
    builder.TaskEntryPoint = typeof(BG).ToString(); 
    TimeTrigger trig = new TimeTrigger(15, false); 
    builder.SetTrigger(trig); 
    SystemCondition userCondition = new SystemCondition(SystemConditionType.UserNotPresent); 
    builder.AddCondition(userCondition); 
    builder.CancelOnConditionLoss = false; 
    builder.Register(); 
} 

BG.cs

using Windows.ApplicationModel.Background; 
using Windows.Storage; 

namespace TimerBG 
{ 
    public sealed class BG : IBackgroundTask 
    { 
     BackgroundTaskDeferral _deferral; 

     public async void Run(IBackgroundTaskInstance taskInstance) 
     { 
      _deferral = taskInstance.GetDeferral(); 

      StorageFolder storageFolder = ApplicationData.Current.LocalFolder; 
      StorageFile sampleFile = await storageFolder.GetFileAsync("sample.txt"); 
      await FileIO.WriteTextAsync(sampleFile, DateTime.Now.Minute.ToString() + ":" + DateTime.Now.Second.ToString()); 

      _deferral.Complete(); 
     } 
    } 
} 

Das Paket Manifest Hintergrundaufgaben-Eigenschaft auf "Timer" mit dem Einspeisepunkt als „TimerBG. BG ".

Jede Hilfe würde sehr geschätzt werden.

+2

Meinten Sie eine Bedingung von "Benutzer ** nicht ** vorhanden" zu haben? –

+0

Ich habe das gerade anhand dieser Dokumentation (https://docs.microsoft.com/en-us/uwp/api/Windows.ApplicationModel.Background.SystemConditionType) gesehen und teste UserPresent jetzt im Release-Code. – detailCode

+0

Okay, auf SystemConditionType.UserPresent umgestellt. Wenn die App im Debug mit VS ausgeführt wird, wird die Hintergrundaufgabe nie ausgelöst und trifft meinen Haltepunkt. Ich habe Schaltflächen erstellt, um zu prüfen, ob die Aufgabe registriert ist. Was vermisse ich? – detailCode

Antwort

1

die Lösung nach dem Lesen der Artikel gefunden:

https://docs.microsoft.com/en-us/windows/uwp/launch-resume/debug-a-background-task

Hintergrund Aufgaben und Visual Studio-Paket Bereitstellung

Wenn eine Anwendung, die Visual Studio bereitgestellt wird Hintergrundaufgaben verwendet, und die Version mit (Major und/oder Minor), die in Manifest-Designer angegeben wurden, wird dann aktualisiert. Anschließend kann die erneute Bereitstellung der App mit Visual Studio dazu führen, dass die Hintergrundaufgaben der App angehalten werden. Dies kann wie folgt behoben werden:

  • Wenn Sie die App bereits mit Visual Studio und seine Hintergrundaufgaben eingesetzt werden nun zum Stillstand gekommen, neu starten oder abmelden/log in der App-Hintergrund-Tasks zu erhalten, wieder zu arbeiten.
Verwandte Themen