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(),它会通知操作系统您已完成执行任务并且系统应该终止它。

NotifyComplete()解决方案是在 async 方法的末尾移动webClient_DownloadStringCompleted(在这种情况下),然后......哇!

警告 1:您有最多 25 秒的时间来完成您正在做的任何事情,否则任务将被终止。

警告 2:您的后台任务不能消耗超过(在某些手机上)6 MB(在我用 windows phone 8 测试的模拟器上)10 MB 内存!如果您的后台任务执行,它将被终止。

如果您的应用程序要消耗更多内存和时间(最多 10 分钟),最好考虑使用资源密集型后台任务,请注意这种类型的任务仅在手机充电时可用!

于 2012-12-15T00:38:48.950 回答