2014-12-04 108 views
0

我有一个消息对话框以在没有互联网时提示用户。MessageDialog在被调用时崩溃 - Windows Phone Store应用程序

public async void validateInternet() 
{ 
    if (!isInternet()) 
    { 
     Action cmdAction = null; 
     MessageDialog _connectAlert = new MessageDialog("We are currently experiencing difficulties with your conectivity. Connect to internet and refresh again.", "No internet"); 
     _connectAlert.Commands.Add(new UICommand("Retry", (x) => { cmdAction =() => validateInternet(); })); 
     _connectAlert.DefaultCommandIndex = 0; 
     _connectAlert.CancelCommandIndex = 1; 
     await _connectAlert.ShowAsync(); 
     cmdAction.Invoke(); 
    } 
} 

public static bool isInternet() 
{ 
    ConnectionProfile connections = NetworkInformation.GetInternetConnectionProfile(); 
    bool internet = connections != null && connections.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess; 
    return internet; 
} 

现在,我在MainPage加载时调用此函数validateInternet。该应用程序打开消息对话框,并立即崩溃。代码有什么问题?

一个A first chance exception of type 'System.UnauthorizedAccessException' occurred in BusTrack.exe Additional information: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

await _connectAlert.ShowAsync(); 
+0

代码本身没有问题。它可以在Page.Loaded和OnNavigatedTo中正常工作。你究竟在哪里叫它?从UI线程? – 2014-12-04 07:11:04

+0

我从'public MainPage()'调用它。我也尝试从'MainPage_Loaded'调用它。相同的错误 – 2014-12-04 07:38:30

+1

好吧,这似乎是为我工作。 'validateInternet'方法是你在'Loaded'处理程序中调用的唯一东西吗?如果您尝试显示对话框,而另一个对话框已显示,则会发生此异常。与此无关 - 如果您不按“重试”并将抛出NullPointerException,则cmdAction将为空。 – yasen 2014-12-04 09:10:12

回答

1

抛出@yasen正确地指出的那样,validateInternet()被称为无论是在MainPage_loaded()OnNavigatedTo()

因此,System.UnauthorizedAccessException发生,因为这两种方法都会尝试显示messageDialog。所以,千万不要试图同时调用两个消息对话框。

相关问题