【发布时间】:2014-12-04 06:51:49
【问题描述】:
当没有互联网时,我有一个消息对话框来提示用户。
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();
【问题讨论】:
-
代码本身没有问题。它在 Page.Loaded 和 OnNavigatedTo 中都能正常工作。你到底在哪里称呼它?来自 UI 线程?
-
我从
public MainPage()调用它。我也尝试从MainPage_Loaded调用它。同样的错误 -
嗯,这似乎对我有用。
validateInternet方法是您在Loaded处理程序中调用的唯一方法吗?如果您尝试显示一个对话框,而另一个对话框已经显示,则会发生此异常。与此无关 - 如果您不按“重试”,则 cmdAction 将为 null,并将引发 NullPointerException。 -
我的 MainPage_loaded 有 async 关键字。 MainPage_Loaded 没有别的。那么,异步函数调用异步函数的数量有限制吗?
-
你发现了错误。我在
MainPage_Loaded和OnNavigatedTo()中都调用了validateInternet()。因此,两个消息框,导致异常。
标签: c# windows-runtime windows-phone-8.1