Windows Phone - Web客户端请求未执行

Avi*_*rix 1 c# windows-phone-7 windows-phone windows-phone-8

/*在写这个问题,测试的东西,我设法回答这个问题,我分享我的研究结果,这样他们就可以帮助到其他一些可怜的灵魂.请看下面的答案.*/

我正在尝试在后台任务中从我的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();

    }
Run Code Online (Sandbox Code Playgroud)

这就是...... webClient_DownloadStringCompleted永远不会被执行.

Avi*_*rix 5

这里的关键是异步WebClient执行其方法并 在有机会获取数据之前执行.NotifyComplete()WebClient

当您致电时NotifyComplete(),它会通知操作系统您已完成执行任务,系统应终止该任务.

解决方案是NotifyComplete()在异步方法结束时移动webClient_DownloadStringCompleted(在这种情况下)和... voala!

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

警告2:您的后台任务消耗不超过(在某些手机上)6 MB(在我使用Windows Phone 8测试的模拟器上)10 MB内存!如果您的后台任务确实如此,它将被终止.

这是很好的考虑使用资源密集型后台任务,如果你的应用程序将会占用更多的内存和时间(最多10分钟),注意这种类型的任务只有当手机正在充电时可!