UWP 在ShellPage.xaml.cs 中导航至其他页面引发System.Exception
2024-09-01 03:59:36
最近有一个需求,需要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));
});
最新文章
- android SharedPreferences介绍
- 安装logstash,elasticsearch,kibana三件套
- KBMMW 4.90.00 发布
- JD(转载)
- 搭建apache本地服务器·Mac
- Java NIO 系列学习(一)Java NIO概述
- 加密PDF文件的打印问题
- ICPC Asia Regional 2015 Japan.Routing a Marathon Race(DFS)
- ASP.NET MVC Web API 学习笔记---Web API概述及程序示例
- win8共享文件设置 详细教程
- UI设计规范:单选按钮 vs 复选框,没那么简单
- Oracle中ROWNUM的使用技巧
- python学习——简介和入门
- js get selected text
- hihocoder1477 闰秒
- vue整合mui
- Quick Reference Card Urls For Web Developer
- Oz 创建Windows2008R2镜像
- ssl证书原理
- ASP.NET动态网站制作(18)-- jq作业讲解及知识补充