windows-8 – WinRT HttpClient阻止闪屏

前端之家收集整理的这篇文章主要介绍了windows-8 – WinRT HttpClient阻止闪屏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在某个Page的LoadState方法中做异步请求.我使用HttpClient发出请求,我希望在等待结果时闪屏消失.

如果我没有连接到任何网络,闪屏立即消失,我得到一个空白页面,因为请求显然没有发生.

但是,如果我连接到网络但有连接问题(例如,我设置了错误的IP地址),它似乎启动请求并阻止.

我的期望是HttpClient会意识到它无法发送请求并抛出异常或只是返回一些东西.

我设法通过设置大约800毫秒的超时来解决阻塞问题,但现在当Internet连接正常时它无法正常工作.这是最好的解决方案,我应该设置超时吗?什么是适当的超时,使我能够区分无限期阻塞呼叫和正好在较慢网络上的正确呼叫?

我可能会在每次请求之前检查互联网连接,但这听起来像是一个不可预测的解决方案……

编辑:现在,它真的很有趣.我再次尝试过,它阻止了这一点:

var rd = await httpClient.SendAsync(requestMsg);

如果我按照评论中的建议使用Task.Run()并获得一个新的线程,那么它总是很好.
但是没有Task.Run(),如果没有Internet访问但网络访问不是“有限”(它表示IPv4连接是“Internet访问”,虽然我无法在浏览器中打开单个网站而没有数据从Web服务返回.它只是抛出System.Net.Http.HttpRequestException,这是我首先想到的东西)只有当网络连接受限时才会阻塞.

解决方法

如果不是设置超时,而是使用了检查连接状态

public static bool IsConnected
    {
        get
        {
            return NetworkInformation.GetInternetConnectionProfile() != null;
        }
    }

这样,如果IsConnected,那么你打电话;否则,忽略它.

我不确定你是否在App.xaml.cs中运行它?我发现在该类中发出的请求可能是变化无常的,最好将功能移动到扩展的启动屏幕,以确保应用程序在激活过程中始终如一.

http://msdn.microsoft.com/en-us/library/windows/apps/xaml/Hh868191(v=win.10).aspx

猜你在找的Windows相关文章