windows-8 - WinRT HttpClient 阻止启动画面

标签 windows-8 windows-runtime winrt-xaml

我在某个页面的 LoadState 方法中执行异步请求。我使用 HttpClient 发出请求,我希望在等待结果时闪屏会消失。

如果我没有连接到任何网络,则启动画面会立即消失,并且我会得到一个空白页面,因为请求显然没有发生。

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

我的期望是 HttpClient 会意识到它不能发送请求并且要么抛出异常,要么只返回一些东西。

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

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

编辑:现在,这真的很有趣。我又试了一次,它在这一点上阻塞:

var rd = await httpClient.SendAsync(requestMsg);

如果我按照评论中的建议使用 Task.Run() 并获得一个新线程,那么它总是可以的。
但是,如果没有 Internet 访问权限但网络访问权限不是“受限”(它表示 IPv4 连接是“Internet 访问权限”,尽管我无法在浏览器中打开单个网站并且没有数据,那么没有 Task.Run() 也可以从 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-8 - WinRT HttpClient 阻止启动画面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14444431/

相关文章:

c# - 更改列表框中所选项目的背景颜色

c# - Windows 8 空白应用 + DEP0700 错误

c# - 如何找到包含等待/异步代码的间歇性失败单元测试的原因?

c# - 访问 Win8 Metro 风格应用程序中的其他进程

windows-runtime - 如何等待 IAsyncAction?

c# - 图钉调整绑定(bind)缩放级别大小

c# - Windows 8 GridView - 禁用项目点击可视化

xaml - 资源本地化: use of x:Uid referring to another assembly's resource

c# - 在 Windows 10 全屏中使用 CameraCaptureUI

c# - 使用 CaptureElement/MediaCapture 时如何在网络摄像头之间切换?