最近有一个需求,需要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));
});

UWP 在ShellPage.xaml.cs 中导航至其他页面引发System.Exception的更多相关文章

  1. WPF App.xaml.cs常用模板,包括:异常捕获,App只能启动一次

    App.xaml.cs中的代码每次都差不多,故特地将其整理出来直接复用: using System; using System.Configuration; using System.Diagnost ...

  2. 关于 WP 开发中.xaml 与.xaml.cs 的关系

    今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...

  3. WP 开发中.xaml 与.xaml.cs

    关于 WP 开发中.xaml 与.xaml.cs 的关系   今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: ...

  4. New UWP Community Toolkit - XAML Brushes

    概述 上一篇 New UWP Community Toolkit 文章中,我们对 V2.2.0 版本的重要更新做了简单回顾.接下来会针对每个重要更新,结合 SDK 源代码和调用代码详细讲解. 本篇我们 ...

  5. Windows 10开发基础——VS2015 Update1新建UWP项目,XAML设计器无法加载的解决

    这次,我们来解决一个问题...在使用Visual Studio 2015 Update 1的时候,新建一个UWP的项目,XAML设计器就会崩,具体异常信息如下图: 解决方法如下:下面圈出的那个路径就按 ...

  6. 错误:“ResourceDictionary”根元素需要 x:Class 特性来支持 XAML 文件中的事件处理程序。请移除 MouseLeftButtonDown 事件的事件处理程序.

    原文:错误:"ResourceDictionary"根元素需要 x:Class 特性来支持 XAML 文件中的事件处理程序.请移除 MouseLeftButtonDown 事件的事 ...

  7. "xaml+cs"桌面客户端跨平台初体验

    "Xaml+C#"桌面客户端跨平台初体验 前言   随着 .Net 5的到来,微软在 .Net 跨平台路上又开始了一个更高的起点.回顾.Net Core近几年的成果,可谓是让.Ne ...

  8. Windows Store App 全球化:在XAML元素中引用文件资源

    上一小节讲解了如何在XAML元素中使用x:Uid属性引用资源文件中的字符串资源,通过改变语言首选项显示不同的运行结果.如果把字符串资源变成文件资源,就不能使用x:Uid属性来引用这些文件资源.本小节将 ...

  9. Windows Store App 全球化:在XAML元素中引用字符串资源

    在应用程序中可以通过XAML元素和后台代码两种方式引用资源文件中的字符串资源.本小节先讲述如何在XAML元素中引用字符串资源的相关知识点. 在XAML元素中可以通过使用x:Uid属性来引用资源文件中的 ...

随机推荐

  1. 从零开始入门 K8s | 手把手带你理解 etcd

    作者 | 曾凡松(逐灵) 阿里云容器平台高级技术专家 本文整理自<CNCF x Alibaba 云原生技术公开课>第 16 讲. 导读:etcd 是用于共享配置和服务发现的分布式.一致性的 ...

  2. Xcode9 脚本打包报错

    Xcode9 脚本编译报错   xcodebuild -exportArchive fails with error Locating signing assets failed X9的exporto ...

  3. JavaScript2 基础

    运算符 赋值运算符  用于给变量赋值. y=5;/z=2; 算术运算符  即算数符号,是基本算数运算.+ 加 / - 减/ * 乘/ / 除/ % 取余数/ ++ 自增(y++先赋值再自增/++y先自 ...

  4. CoderFocers-620C

    There are n pearls in a row. Let's enumerate them with integers from 1 to n from the left to the rig ...

  5. Python3 并发编程小练习

    实现基于TCP协议套接字,服务端实现接收客户端的连接并发 # server.py import socket from threading import Thread server = socket. ...

  6. 【Vuejs】301- Vue 3.0前的 TypeScript 最佳入门实践

    前言 我个人对更严格类型限制没有积极的看法,毕竟各类转类型的骚写法写习惯了. 然鹅最近的一个项目中,是 TypeScript+ Vue,毛计喇,学之...-真香! 1. 使用官方脚手架构建 npm i ...

  7. 【集合系列】- 深入浅出分析 ArrayDeque

    一.摘要 在 jdk1.5 中,新增了 Queue 接口,代表一种队列集合的实现,咱们继续来聊聊 java 集合体系中的 Queue 接口. Queue 接口是由大名鼎鼎的 Doug Lea 创建,中 ...

  8. 【NodeJS】nvm

    [NodeJS]nvm node多版本管理 NVM_HOME=C:\env\nvm NVM_SYMLINK=C:\env\nodejs 查看版本 nvm v 查看当前使用的node版本 nvm cur ...

  9. 用递归实现N!

    def digui(n): result = 1 if n == 2: result = 2 elif n > 2: result = n* digui(n-1) print(result) r ...

  10. Ubuntu 18.04 美化配置

    网上很多关于Ubuntu 18.04 美化的配置,但每个人遇见的问题都有些不太一样, 现将本人配置的过程整理如下 更新源为阿里云 找到Software & Updates,将源更新为阿里云的源 ...