2016-07-27 6 views
2

私はタイトルが自明だと思う:私はバックグラウンドタスクを毎日、真夜中に発射するのに苦労する。タスクはTimeTriggerで正しく登録され、マニフェストに追加されますが、結果はさまざまです。電話でのみ発生することもありますが、PCでのみ発生することもあります。UWPのバックグラウンドで真夜中に毎日コードを実行するには?

これを行う正しい方法は何か教えてください。私はこれを除いて私のアプリですべてを終えた。

ありがとうございます。

編集:私は現在、2つのバックグラウンドタスクを使用しています:それぞれ1つはTimeTriggerを使用し、最初は深夜に1回実行するように設定されており、唯一の使用は24時間ごとに実行するようにスケジュールしています。しかし、私が以前に言ったように、それは期待どおりに動作しません。

答えて

2

OSは、通知の有無に関わらず、バックグラウンドタスクを終了する/キャンセルすることができます。 例... 15分間隔のbgtaskを登録してタスクキャンセルを実装すると、タスクが1日以内に数回キャンセルされることがあります。

私のお勧めは...「midnight」内でbgtaskを数回実行して、タスクのキャンセルを回避してみてください。

  1. あなたのbgtaskでキャンセルを実装します。
  2. タスクを1時間間隔で登録します。
  3. タスクの開始時に、時刻とフラグを確認し、時刻が '真夜中'でフラグが設定されていない場合はタスクを実行します。
  4. localsettingsで 'done'フラグを設定します。

バックグラウンドキャンセルの詳細はこちらです。 https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/handle-a-cancelled-background-task

そして、この私の答えは、あなたはここで Timetrigger not firing backgroundtask UWP

役立ちますbgtaskの私の実装であることがあります。キャンセルをサポートしています。

public async void Run(IBackgroundTaskInstance taskInstance) 
    { 
     string dbgout = ""; 
     var startTime = DateTime.Now; 
     dbgout += "BgTask "; 

     var cost = BackgroundWorkCost.CurrentBackgroundWorkCost; 
     var cancel = new System.Threading.CancellationTokenSource(); 
     taskInstance.Canceled += (s, e) => 
     { 
      dumpLog("Canceled."); 
      cancel.Cancel(); 
      cancel.Dispose(); 
     }; 


     try 
     { 
      _deferral = taskInstance.GetDeferral(); 

      dbgout += cost.ToString() + " "; 

      switch (cost) 
      { 
       case BackgroundWorkCostValue.Low: 
       case BackgroundWorkCostValue.Medium: 
        await TimeConsumedTaskLowMidAsync().AsTask(cancel.Token); 
        break; 
       case BackgroundWorkCostValue.High: 
        await TimeConsumedTaskHighAsync().AsTask(cancel.Token); 
        break; 
       default: 
        break; 
      } 

     } 
     catch (Exception e) 
     { 
      dbgout += ("Failed " + e.Message + "..."); 
     } 
     finally 
     { 
      dumpLog(dbgout + " " + (DateTime.Now - startTime).TotalSeconds.ToString("F1")); 
      _deferral.Complete(); 
     } 

    } 
+0

thanks mate!私はあなたが正式なアラームアプリが行うのと同じくらい簡単に特定の時間にバックグラウンドタスクをスケジュールすることができないことを怒っていても答えました。そして、私はアラームがキャンセルされる1回を覚えていません。マイクロソフトは実際に開発者にもっと力を与える必要があります。それは残念だ。再度、感謝します。私はあなたの考えを数日間試してみるつもりです。 –

-2

どのくらいの数が変わりますか?

まず最初に、1/5分ごとに時間をチェックし、0:00に機能を実行するタイマーを挿入することだと思います。 もちろん、タイマーを「現在の時刻起動時の制御」..

が、私は持っているだけで最初のアイデア..です

関連する問題