【问题标题】:AudioPlaybackAgent crashes when network not available网络不可用时 AudioPlaybackAgent 崩溃
【发布时间】:2013-07-12 00:19:01
【问题描述】:

我目前正在使用AudioPlaybackAgent 播放在线音频流(mp3)。如果设备连接到互联网音频正在播放。但是当没有网络连接并且我在我的应用程序中按下play 按钮时,会崩溃

An unhandled exception of type 'System.SystemException' occurred in System.Windows.ni.dll

它指向这部分代码

....
case UserAction.Play:
    if (player.PlayerState != PlayState.Playing)
    {
        player.Play();
    }
    break;  // << right here
....

我可以粘贴整个音频播放器,但可以粘贴其标准生成的背景音频播放器。 这里还连线的是在后台播放器初始化时有一行代码

Application.Current.UnhandledException += AudioPlayer_UnhandledException;

它应该处理未处理的异常......但它没有。

我可以使用简单的 try-catch 在音频播放器中捕获此异常,但我无法使用来自 audioplaybackagent 的 MessageBox 显示它(因为如果您尝试将应用提交到商店,MS 不允许它)。

所以我的问题是:

  1. 如何在我的应用程序中捕获异常,然后向用户显示例如 MessageBox,说没有网络连接
  2. 为什么发布的一段代码没有处理未处理的异常?

感谢您的帮助!

【问题讨论】:

    标签: c# windows-phone-7 exception exception-handling audio-playback-agent


    【解决方案1】:

    您是否检查了音频播放代理中的AudioPlayer_UnhandledException 方法?开箱即用,如果我没记错的话,它的逻辑只在附加调试器时处理错误。

    但是,IMO,处理这种情况的更好方法是检查是否有网络连接并在应用程序本身中相应地禁用音频流/提醒用户,而不是依靠代理来检测和通知是否网络是否可用。

    Windows Phone 提供了在Microsoft.Phone.Net.NetworkInformation 中查找连接状态的方法,即DeviceNetworkInformation 类。

    DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(NetworkChange);
    
    void NetworkChange(object sender, NetworkNotificationEventArgs e)
    {
        // Network changed, disable audio streaming and alert user
    }
    

    【讨论】:

      【解决方案2】:

      我已经使用以下代码检查了点击“播放”按钮时网络是否可用

      if (NetworkInterface.GetIsNetworkAvailable() == false)
      {
          // push some info to user...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        相关资源
        最近更新 更多