2016-11-03 25 views
0

私はUWPアプリケーションを開発しています。現在のアプリケーション状態がアクティブまたは中断されている場合は、15秒ごとに自分の位置を送信する必要があります。私は2つの異なるアプローチを試してみました:アプリはDispatcherは利用できない中断されたときに、アプリケーションがUWP - バックグラウンドタスク - 短い間隔

  • アクティブなとき

    await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async() => 
         { 
          await UpdateMethod(data); 
         }); 
    

    var taskResult = await backgroundTrigger.RequestAsync(taskParameters); 
    
    1. ExtendedExecution

      • が正常に動作します
    2. ExtendedExecution +バックグラウンドタスク+アプリケーショントリガー

      • アプリがアクティブであるときそれが正常に動作し
      • アプリは、私が

    答えて

    1
    上のメソッドを呼び出した後ApplicationTriggerResult.DisabledByPolicyを得続ける中断されたとき

    アプリの一時停止ディスパッチャが利用できない

    ExtendedExecutionSessionが正常に要求された場合、アプリを一時停止した後、Dispatcherの公式サンプルが正常に機能しました。私の環境はWindows 10ビルド14393です。私はこの機能をPCデバイスでテストしました。

    は、私はあなたの要件については、私の場所ごとに15秒

    を送信する必要があり、LocationTrackingExtendedExecutionReasonは使用をお勧めします。公式サンプルのscenario 3は、あなたが望むものと同じ機能を実装しており、参照することができます。アプリは、私は公式のサンプルによると

    上のメソッドを呼び出した後ApplicationTriggerResult.DisabledByPolicyを得続ける中断され

    ExtendExcutionはすでにあなたの要件を満たしています。 application triggerについては、わかっている限り、UIスレッドからリクエストすることはできません。

    さらに、ExtendExcutionは、デバイスに電源が接続されていない場合、操作を一時停止してからさらに10分間アプリを実行させることができます。詳細はthis videoを参照してください。

    +0

    プライベート非同期ボイド同期(オブジェクト同期) { var data = sync as string; (データ!= NULL)場合 は{を待つCoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal、非同期()=> { は_dlを待ちます。UpdateLocation(data); //この行のブレークポイントは決してヒットしません }); } PC(10586&14393)2錠を試しましたが、これは機能しません。私は ExtendedExecutionReason.LocationTrackingを使用しています。 – lijevosmetalo

    +0

    @lijevosmetalo私は14393で公式のサンプルをテストしましたが、動作します。シナリオ3をテストし、公式のサンプルに続いてコードを修正してください。あなたの問題を1つのコード行だけで解決することはできません。それでも問題が解決しない場合は、再生プロジェクト全体をアップロードしてください。 –

    +0

    公式サンプルは私にとっては役に立たない。シナリオ3を試して、ブレークポイントを140行目(または140〜159行目)に置いてください。シナリオを開始し、VSからアプリケーションを停止します。 OnTimerメソッドでDispatcherを使用しないシナリオ1は正常に動作し、シナリオ3は正常に動作しません。 – lijevosmetalo

    関連する問題