如何在我的UWP应用程序中处理互联网可用性?

时间:2016-10-31 19:20:17

标签: uwp template10

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

我该如何有效地做到这一点?

PS:我使用的是Template 10框架。

1 个答案:

答案 0 :(得分:2)

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

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>

祝你好运!