最近有一个需求,需要App监测网络变化,并在网络变化的同时用户,你切网啦,并且导航至一个切网的特定页面。

和Android、iOS的小伙伴后共同发现,人家有一个类似”拦截器“的框架,可以拦截App发出的请求,并返回一个特定的操作。

而之前在C#网络请求的时候,我们的Http Client要么返回完整的data数据,要么null。而没有第三种情况。他们的拦截器可以返回第N中操作。

经过一顿操作猛于虎的查找资料,并没有找到类似C#的网络请求框架。

但是C#中的委托应该可以实现我的需求。

不过我对委托不熟悉,而且使用委托的话,对现在App中的所有Api都会有影响,改动范围大。所以就搁置了这种想法。

后来仔细分析了一下,既然用户手动触发切换网络的操作,那么App是不是能注册一个网络变化的事件,然后等网络一变,App就立马收到通知呢?

答案是肯定的。

Uwp中提供了 NetworkInformation.NetworkStatusChanged Event

后来我在WindowsCommunityToolkit也发现中微软写的NetworkHelper,有一个也是同样的方法。

这样一来,我们就需要在ShellPage中注册一下即可。

在ShellPage初始化的时候加入

        public ShellPage()
{
InitializeComponent(); NetworkHelper.Instance.NetworkChanged += Instance_NetworkChanged;
}
private async void Instance_NetworkChanged(object sender, EventArgs e)
{
shellFrame.Navigate(typeof(Extras.AreaChangedPage));
}

不过你要是直接运行上面的代码,App可以正常检测到网络变化,并且执行NetWorkChanged事件里面的代码。

但是在导航至页面的时候,会报错System.Exception。

这是因为在执行页面跳转操作的时候,需要UI线程支持。

但是ShellPage不属于UI线程里面的,所以需要Dispatcher.RunAsync

await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
shellFrame.Navigate(typeof(Extras.AreaChangedPage));
});

最新文章

  1. android SharedPreferences介绍
  2. 安装logstash,elasticsearch,kibana三件套
  3. KBMMW 4.90.00 发布
  4. JD(转载)
  5. 搭建apache本地服务器·Mac
  6. Java NIO 系列学习(一)Java NIO概述
  7. 加密PDF文件的打印问题
  8. ICPC Asia Regional 2015 Japan.Routing a Marathon Race(DFS)
  9. ASP.NET MVC Web API 学习笔记---Web API概述及程序示例
  10. win8共享文件设置 详细教程
  11. UI设计规范:单选按钮 vs 复选框,没那么简单
  12. Oracle中ROWNUM的使用技巧
  13. python学习——简介和入门
  14. js get selected text
  15. hihocoder1477 闰秒
  16. vue整合mui
  17. Quick Reference Card Urls For Web Developer
  18. Oz 创建Windows2008R2镜像
  19. ssl证书原理
  20. ASP.NET动态网站制作(18)-- jq作业讲解及知识补充

热门文章

  1. iText + Freemarker实现pdf的导出,支持中文、css以及图片,页眉页脚,页眉添加图片
  2. 重启testjenkins的步骤
  3. List接口下的集合
  4. 数据结构与算法之java语言实现(一):稀疏数组
  5. 什么是API文档?--斯科特·马文
  6. 补习系列(20)-大话 WebSocket 与 "尬聊"的实现
  7. shell 往文件中添加一列一样的字符串
  8. 第八章 使用jQuery操作DOM
  9. BZOJ3110[Zjoi2013]K大数查询(树状数组+整体二分)
  10. UESTC1961-咸鱼睡觉觉