1

/* この質問を書き、テストを行っている間に、なんとか質問に答えることができました。調査結果を共有して、他の貧しい人々の助けになるようにします。以下の回答をご覧ください。*/

バックグラウンド タスクで API から JSON データをフェッチしようとしています。私はバックグラウンドタスクをうまく実行していますが、データを取得しようとしても何も起こりません?!?

ここに私が使用するコードがあります:

    protected override void OnInvoke(ScheduledTask task)
    {

        string wurl = @"http://test.com/api/stuff/getdata";

        WebClient webClient = new WebClient();
        webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
        webClient.DownloadStringAsync(new Uri(wurl));


        NotifyComplete();

    }

それだけです...webClient_DownloadStringCompleted実行されることはありません。

4

1 に答える 1

5

ここで重要なことは、WebClientがそのメソッドを非同期的に実行し、 がデータをフェッチするNotifyComplete() 前に実行されることです。WebClient

を呼び出すとNotifyComplete()、タスクの実行が完了し、システムがタスクを終了する必要があることを OS に通知します。

NotifyComplete()解決策は、非同期メソッドの最後に移動することですwebClient_DownloadStringCompleted(この場合) そして ... voala !

警告 1:何をしていても、最大 25 秒以内に終了してください。それ以外の場合、タスクは終了します。

警告 2:バックグラウンド タスクは (一部の電話では) 6 MB (Windows Phone 8 でテストしたエミュレーターでは) 10 MB を超えるメモリを消費することはできません! バックグラウンド タスクが実行された場合、そのタスクは終了します。

アプリがより多くのメモリと時間 (最大 10 分) を消費する場合は、リソース集約型のバックグラウンド タスクの使用を検討することをお勧めします。このタイプのタスクは、電話の充電中にのみ使用できることに注意してください。

于 2012-12-15T00:38:48.950 に答える