如何处理我的 UWP 应用程序中的 Internet 可用性?

How can I handle internet availability in my UWP app?

我的应用程序使用互联网服务来获取和保存数据。如果我尝试在没有连接的情况下使用它们,我会收到错误消息。我还想向用户表明没有连接,这是必需的。

我怎样才能有效地做到这一点?

PS: 我使用Template 10框架。

要务实地处理此问题,您首先需要确保已升级到使用 Template 10 1.1.12 或更高版本。使用此版本,您不仅可以使用 NetworkAvailableService 来测试 Internet 连接,还可以测试可用的一般网络 - 取决于您的应用程序是访问本地资源的内部应用程序还是访问 Internet 资源的外部应用程序。

public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> state)
{
    var net = new NetworkAvailableService();
    net.AvailabilityChanged = async e =>
    {
        if (await net.IsNetworkAvailable())
        {
            // yes network 

            if (await net.IsInternetAvailable())
            {
                // yes internet
            }
            else
            {
                // no internet
            }
        }
        else
        {
            // no network
        }
    };
}

处理问题的 UI 部分是另一个问题。您可以在视图模型中有一个 IsConnected INPC 属性,它会导致 UI 元素的可见性发生变化。或者你可以使用精彩的 NetworkConnectionStateTrigger 来改变你的视觉状态。顺便说一下,我就是这样做的。当然,这是教科书式的方法。

https://github.com/dotMorten/WindowsStateTriggers

获取状态触发器
<VisualStateManager.VisualStateGroups>
    <VisualStateGroup>
        <VisualState x:Name="connected">
            <VisualState.StateTriggers>
                <triggers:NetworkConnectionStateTrigger ConnectionState = "Connected" />
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="MyTextBlock.Text" Value="Internet is available" />
            </VisualState.Setters>
        </VisualState>
        <VisualState x:Name="disconnected">
            <VisualState.StateTriggers>
                <triggers:NetworkConnectionStateTrigger ConnectionState = "Disconnected" />
            </VisualState.StateTriggers>
            <VisualState.Setters>
                <Setter Target="MyTextBlock.Text" Value="No internet connection"/>
            </VisualState.Setters>
        </VisualState>
    </VisualStateGroup>
</VisualStateManager.VisualStateGroups>

祝你好运!