C# 没有internet连接时Windows应用商店应用程序崩溃

C# 没有internet连接时Windows应用商店应用程序崩溃,c#,.net,windows-8,microsoft-metro,windows-store-apps,C#,.net,Windows 8,Microsoft Metro,Windows Store Apps,我正在创建我的第一个windows应用商店应用程序,在启动期间,我有几个web服务调用,并且定期通过该应用程序调用。然而,我注意到,当我因为网络服务呼叫而无法访问互联网时,我的应用程序将不会启动/崩溃或只是关闭。我希望我的应用程序以正常的方式启动,并带有一些初始数据,即使在没有互联网接入的情况下也能正常运行。我从webservice获得的数据主要是我在各种文本框和图表中显示的天气数据 下面的代码显示了我的扩展启动屏幕中的webservice调用 public sealed partial cla

我正在创建我的第一个windows应用商店应用程序,在启动期间,我有几个web服务调用,并且定期通过该应用程序调用。然而,我注意到,当我因为网络服务呼叫而无法访问互联网时,我的应用程序将不会启动/崩溃或只是关闭。我希望我的应用程序以正常的方式启动,并带有一些初始数据,即使在没有互联网接入的情况下也能正常运行。我从webservice获得的数据主要是我在各种文本框和图表中显示的天气数据

下面的代码显示了我的扩展启动屏幕中的webservice调用

public sealed partial class ExtendedSplashScreen : Page
{

//parameterItem max1DayAgo = new parameterItem();
//parameterItem min1DayAgo = new parameterItem();


public ExtendedSplashScreen()
{
    this.InitializeComponent();
}

/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached.  The Parameter
/// property is typically used to configure the page.</param>
protected override async void OnNavigatedTo(NavigationEventArgs e)
{

    string[] periodSelector = { "1DayAgo", "1WeekAgo", "1MonthAgo" };
    string[] modeSelector = { "max", "min" };
    string[] parameterSelector = { "umtTemp1", "umtWindSpeed", "umtAdjBaromPress", "umtRainRate" };


    //Create a webservice object
    ServiceReference.WebServiceSoapClient webServiceObj = new ServiceReference.WebServiceSoapClient();
    //First we create an object that holds max data for yesterday
    var getMax1DayAgoObj = await webServiceObj.GetSelectedMaxMinDataAsync(parameterSelector, periodSelector[0], modeSelector[0]);

    //create an object that holds min data for yesterday

    var getMin1DayAgoObj = await webServiceObj.GetSelectedMaxMinDataAsync(parameterSelector, periodSelector[0], modeSelector[1]);
    //Save arrayOfValue and arrayOfUnit to a parameterItem object. these objects are created during startup
    // and the can be accessed and updated by all methods in this page later we will see that maxMinButton_Click method
    //for the maxMinButton will use these data

    //create an object that holds max data for last week
    var getMax1WekAgoObj = await webServiceObj.GetSelectedMaxMinDataAsync(parameterSelector, periodSelector[1], modeSelector[0]);
    //create an object that holds min data for last week
    var getMin1WekAgoObj = await webServiceObj.GetSelectedMaxMinDataAsync(parameterSelector, periodSelector[1], modeSelector[1]);
    //create an object that holds max data for last month
    var getMax1MonthAgoObj = await webServiceObj.GetSelectedMaxMinDataAsync(parameterSelector, periodSelector[2], modeSelector[0]);
    //create an object that holds min data for last month
    var getMin1MonthAgoObj = await webServiceObj.GetSelectedMaxMinDataAsync(parameterSelector, periodSelector[2], modeSelector[1]);


    (App.Current as App).max1DayAgo.arrayOfValue = getMax1DayAgoObj.arrayOfValue;
    (App.Current as App).max1DayAgo.arrayOfUnit = getMax1DayAgoObj.arrayOfUnit;

    (App.Current as App).min1DayAgo.arrayOfValue = getMin1DayAgoObj.arrayOfValue;
    (App.Current as App).min1DayAgo.arrayOfUnit = getMin1DayAgoObj.arrayOfUnit;


    (App.Current as App).max1WeekAgo.arrayOfValue = getMax1WekAgoObj.arrayOfValue;
    (App.Current as App).max1WeekAgo.arrayOfUnit = getMax1WekAgoObj.arrayOfUnit;

    (App.Current as App).min1WeekAgo.arrayOfValue = getMin1WekAgoObj.arrayOfValue;
    (App.Current as App).min1WeekAgo.arrayOfUnit = getMin1WekAgoObj.arrayOfUnit;

    (App.Current as App).max1MonthAgo.arrayOfValue = getMax1MonthAgoObj.arrayOfValue;
    (App.Current as App).max1MonthAgo.arrayOfUnit = getMax1MonthAgoObj.arrayOfUnit;

    (App.Current as App).min1MonthAgo.arrayOfValue = getMin1MonthAgoObj.arrayOfValue;
    (App.Current as App).min1MonthAgo.arrayOfUnit = getMin1MonthAgoObj.arrayOfUnit;


    string[] startupData = new string[13];


    startupData[0] = " " + (App.Current as App).max1DayAgo.arrayOfValue[0] + " " + (App.Current as App).max1DayAgo.arrayOfUnit[0]; //    maxTemp 
    startupData[1] = " " + (App.Current as App).max1DayAgo.arrayOfValue[1] + " " + (App.Current as App).max1DayAgo.arrayOfUnit[1]; //    maxWindSped 
    startupData[2] = " " + (App.Current as App).max1DayAgo.arrayOfValue[2] + " " + (App.Current as App).max1DayAgo.arrayOfUnit[2]; //    maxAirPressure 
    startupData[3] = " " + (App.Current as App).max1DayAgo.arrayOfValue[3] + " " + (App.Current as App).max1DayAgo.arrayOfUnit[3];//     maxRainfall

    startupData[4] = " " + (App.Current as App).min1DayAgo.arrayOfValue[0] + " " + (App.Current as App).min1DayAgo.arrayOfUnit[0]; //    minTemp 
    startupData[5] = " " + (App.Current as App).min1DayAgo.arrayOfValue[1] + " " + (App.Current as App).min1DayAgo.arrayOfUnit[1];//     minWindSped 
    startupData[6] = " " + (App.Current as App).min1DayAgo.arrayOfValue[2] + " " + (App.Current as App).min1DayAgo.arrayOfUnit[2];//     minAirPressure  
    startupData[7] = " " + (App.Current as App).min1DayAgo.arrayOfValue[3] + " " + (App.Current as App).min1DayAgo.arrayOfUnit[3];//     minRainfall



    // Main fields
    // ServiceReference.WebServiceSoapClient webServiceObj = new ServiceReference.WebServiceSoapClient();
    var getLatestTempObj = await webServiceObj.GetLatestDataAsync("umtTemp1");
    var getLatestWindObj = await webServiceObj.GetLatestDataAsync("umtWindSpeed");
    var getLatestwindDirObj = await webServiceObj.GetLatestDataAsync("umtAdjWinDir");
    var getLatestairPressureObj = await webServiceObj.GetLatestDataAsync("umtAdjBaromPress");

    startupData[8] = " " + getLatestTempObj.Value + " " + getLatestTempObj.Unit;//temperatureMainTxtBlock.Text
    startupData[9] = " " + getLatestWindObj.Value + " " + getLatestWindObj.Unit;//temperatureMainTxtBlock.Text

    startupData[10] = "" + getLatestwindDirObj.Value; //temperatureMainTxtBlock.Text

    startupData[11] = " " + getLatestairPressureObj.Value + " " + getLatestairPressureObj.Unit;//temperatureMainTxtBlock.Text

    startupData[12] = "Last update: " + getLatestwindDirObj.Timestamp;//temperatureMainTxtBlock.Text
    //save the startup data to the global variables
    (App.Current as App).NavigateData = startupData;



    this.Frame.SetNavigationState(e.Parameter as string);
    this.Frame.Navigate(typeof(MainPage));
}
}
公共密封部分类ExtendedSplashScreen:第页
{
//parameterItem max1DayAgo=新parameterItem();
//parameterItem min1DayAgo=新parameterItem();
公共扩展SplashScreen()
{
this.InitializeComponent();
}
/// 
///当此页面即将显示在框架中时调用。
/// 
///描述如何访问此页的事件数据。参数
///属性通常用于配置页面。
受保护的覆盖异步无效OnNavigatedTo(NavigationEventArgs e)
{
string[]periodSelector={“1DayAgo”、“1WeekAgo”、“1MonthAgo”};
字符串[]模式选择器={“最大”,“最小”};
字符串[]参数选择器={“umtTemp1”、“umtWindSpeed”、“umtAdjBaromPress”、“umtRainRate”};
//创建webservice对象
ServiceReference.WebServiceSoapClient webServiceObj=新的ServiceReference.WebServiceSoapClient();
//首先,我们创建一个对象来保存昨天的max数据
var getMax1DayAgoObj=wait webservicebj.GetSelectedMaxMinDataAsync(参数选择器、周期选择器[0],模式选择器[0]);
//创建一个对象,该对象保存昨天的最小数据
var getMin1DayAgoObj=wait webservicebj.GetSelectedMaxMinDataAsync(参数选择器、周期选择器[0],模式选择器[1]);
//将arrayOfValue和arrayOfUnit保存到parameterItem对象。这些对象是在启动期间创建的
//并且可以通过本页中的所有方法访问和更新,稍后我们将看到maxMinButton\u Click方法
//对于maxMinButton,将使用这些数据
//创建保存上周最大数据的对象
var getMax1WekAgoObj=wait webservicebj.GetSelectedMaxMinDataAsync(参数选择器、周期选择器[1],模式选择器[0]);
//创建保存上周最小数据的对象
var getMin1WekAgoObj=wait webservicebj.GetSelectedMaxMinDataAsync(参数选择器、周期选择器[1],模式选择器[1]);
//创建保存上月最大数据的对象
var getMax1MonthAgoObj=wait webservicebj.GetSelectedMaxMinDataAsync(参数选择器、周期选择器[2],模式选择器[0]);
//创建一个对象,该对象保存上月的最小数据
var getmin1monmontagoobj=等待webservicebj.GetSelectedMaxMinDataAsync(参数选择器、周期选择器[2],模式选择器[1]);
(App.Current作为App.max1DayAgo.arrayOfValue=getMax1DayAgoObj.arrayOfValue;
(App.Current作为App.max1DayAgo.arrayOfUnit=getMax1DayAgoObj.arrayOfUnit;
(App.Current作为App.min1DayAgo.arrayOfValue=getMin1DayAgoObj.arrayOfValue;
(App.Current作为App.min1DayAgo.arrayOfUnit=getMin1DayAgoObj.arrayOfUnit;
(App.Current作为App.max1WeekAgo.arrayOfValue=getMax1WekAgoObj.arrayOfValue;
(App.Current作为App.max1WeekAgo.arrayOfUnit=getMax1WekAgoObj.arrayOfUnit;
(App.Current作为App.min1WeekAgo.arrayOfValue=getMin1WekAgoObj.arrayOfValue;
(App.Current作为App.min1WeekAgo.arrayOfUnit=getMin1WekAgoObj.arrayOfUnit;
(App.Current作为App.max1MonthAgo.arrayOfValue=getMax1MonthAgoObj.arrayOfValue;
(App.Current作为App.max1MonthAgo.arrayOfUnit=getMax1MonthAgoObj.arrayOfUnit;
(App.Current作为App.min1MonthAgo.arrayOfValue=getMin1MonthAgoObj.arrayOfValue;
(App.Current作为App.min1MonthAgo.arrayOfUnit=getMin1MonthAgoObj.arrayOfUnit;
string[]startupData=新字符串[13];
startupData[0]=“”+(App.Current作为App.max1DayGo.arrayOfValue[0]+“”+(App.Current作为App.max1DayGo.arrayOfUnit[0];//maxTemp
startupData[1]=“+(App.Current作为App.max1DayGo.arrayOfValue[1]+”“+(App.Current作为App.max1DayGo.arrayOfUnit[1];//maxWindSped
startupData[2]=“+(App.Current作为App.max1DayGo.arrayOfValue[2]+”“+(App.Current作为App.max1DayGo.arrayOfUnit[2];//maxAirPressure
startupData[3]=“+(App.Current作为App.max1DayGo.arrayOfValue[3]+”“+(App.Current作为App.max1DayGo.arrayOfUnit[3];//max1DayGo
startupData[4]=“+(App.Current作为App.min1DayAgo.arrayOfValue[0]+”“+(App.Current作为App.min1DayAgo.arrayOfUnit[0];//minTemp
startupData[5]=“+(App.Current作为App.min1DayAgo.arrayOfValue[1]+”“+(App.Current作为App.min1DayAgo.arrayOfUnit[1];//min1
startupData[6]=“+(App.Current作为App.min1DayAgo.arrayOfValue[2]+”“+(App.Current作为App.min1DayAgo.arrayOfUnit[2];//最小气压
startupData[7]=“+(App.Current作为App.min1DayAgo.arrayOfValue[3]+”“+(App.Current作为App.min1DayAgo.arrayOfUnit[3];//min1
//主要领域
//ServiceReference.WebServiceSoapClient webServiceObj=新的ServiceReference.WebServiceSoapClient();
var getLatestTempObj=等待webservicebj.GetLatestDataAsync(“umtTemp1”);
var getLatestWindObj=await webservicecobj.GetLatestDataAsync(“umtWindSpeed”);
var getLatestwindDirObj=await webservicecobj.GetLatestDataAsync(“umtAdjWinDir”);
var getLatestairPressureObj=等待webservicebj.GetLatestDataAsync(“umtAdjBaromPress”);
startupData[8]=“”+getLatestTempObj.Value+“”+getLatestTempObj.Unit;//TemperatureMainxtBlock.Text
startupData[9]=“”+getLatestWindObj.Value+“”+getLatestWindObj.Unit;//TemperatureMainxtBlock.Text
startupData[10]=“getLatestwindDirObj.Value;//TemperatureMainxtBlock.Text
startupData[11]=“”+getLatestairPressureObj.Value+“”+getLatestairPressureObj.Unit;//温度单位
public static bool IsInternetAvailable;

void NetworkInformation_NetworkStatusChanged(object sender)
{
    if (NetworkInformation.GetInternetConnectionProfile() != null)
        App.IsInternetAvailable = true;
    else
        App.IsInternetAvailable = false;
}

async Task RefreshFromWeb(...)
{
    if (!App.HasInternetAccess)
    {
        await new Windows.UI.Popups.MessageDialog(Strings.NoInternetWarning).ShowAsync();
        return;
    }

    //attempt access here
}

public static bool HasInternetAccess
{
    get
    {
        var profile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();
        if (profile == null)
            return false;
        return profile.GetNetworkConnectivityLevel() == 
               Windows.Networking.Connectivity.NetworkConnectivityLevel.InternetAccess;
    }
}
public static async System.Threading.Tasks.Task HasInternet()
{
    var profile = Windows.Networking.Connectivity.NetworkInformation.GetInternetConnectionProfile();
    var hasNetAccess = profile != null;
    if (!hasNetAccess)
        await new Windows.UI.Popups.MessageDialog(
            content: InfoHub.AppHubViewModel.Strings.NoInternetWarning,
            title: InfoHub.AppHubViewModel.Strings.NoInternetWarning).ShowAsync();
    return hasNetAccess;
}

async void YourControlEvent_Click(object sender, ItemClickEventArgs e)
{
    //if net access, do your stuff, otherwise ignore for now
    if (await IsInternet())
    {
        //do net calls here
    }
}