【问题标题】:MessageDialog crashes when called - Windows Phone Store appMessageDialog 在调用时崩溃 - Windows Phone Store 应用程序
【发布时间】: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_LoadedOnNavigatedTo() 中都调用了validateInternet()。因此,两个消息框,导致异常。

标签: c# windows-runtime windows-phone-8.1


【解决方案1】:

正如@yasen 正确指出的那样,validateInternet()MainPage_loaded()OnNavigatedTo() 中都被调用。

因此,出现System.UnauthorizedAccessException 是因为这两种方法都会尝试显示messageDialog。因此,切勿尝试同时调用两个消息对话框。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多