为什么连接插件网络处理程序在导航发生时不起作用



如果网络连接没有打开以检查它是否关闭,那么,我正在使用连接插件。

我在视图模型定位器类中调用此代码

Private static async void NetworkConnectivityChanged(object sender,Plugin.Connectivity.Abstractions.ConnectivityChangedEventArgs e){}
CrossConnectivity.Current.ConnectivityChanged = NetworkConnectivityChanged;

在我的 Windows 应用程序中导航网络连接状态是否更改后...在这里,此事件不是触发,但是如果不使用导航,我们会更改网络状态,并且它正在工作。

解决方法是在 Winphone 或 UWP 端实现本机网络更改处理程序,并停止仅针对 Winphone 和 UWP 在 PCL 端处理网络更改。您可以通过在处理前检查平台来执行此操作。

使用以下代码创建一个新的 Network.cs 类(这检测网络连接是否有任何变化(

public class InternetConnectionChangedEventArgs : EventArgs
{
public InternetConnectionChangedEventArgs(bool isConnected)
{
this.isConnected = isConnected;
}

public bool IsConnected
{
get { return this.isConnected; }
}

private bool isConnected;
}

public static class Network
{
public static event EventHandler<InternetConnectionChangedEventArgs>
InternetConnectionChanged;

static Network()
{
NetworkInformation.NetworkStatusChanged += (s) =>
{
if (InternetConnectionChanged != null)
{
var arg = new InternetConnectionChangedEventArgs(IsConnected);
InternetConnectionChanged(null, arg);
}
};
}

public static bool IsConnected
{
get
{
var profile = NetworkInformation.GetInternetConnectionProfile();
var isConnected = (profile != null
&& profile.GetNetworkConnectivityLevel() ==
NetworkConnectivityLevel.InternetAccess);
return isConnected;
}
}
}

然后在 app.xaml 中.cs在 UWP 或 WinPhone 中,在OnLaunch事件中注册网络更改处理程序,如下所示

Network.InternetConnectionChanged += this.Network_InternetConnectionChanged;

这是事件处理程序

private void Network_InternetConnectionChanged(object sender,InternetConnectionChangedEventArgs e)
{
if(e.IsConnected){
///code to handle when the internet connectivity is there
}
else{
//code to handle when the internet connectivity is lost
}
}

最新更新