C# 网络不可用时AudioPlaybackAgent崩溃

C# 网络不可用时AudioPlaybackAgent崩溃,c#,windows-phone-7,exception,exception-handling,audio-playback-agent,C#,Windows Phone 7,Exception,Exception Handling,Audio Playback Agent,我目前正在使用AudioPlaybackAgent播放在线音频流(mp3)。如果设备已连接到internet,则正在播放音频。但当没有网络连接时,我按下应用程序中的播放按钮,就会崩溃 An unhandled exception of type 'System.SystemException' occurred in System.Windows.ni.dll 它给我指出了代码的这一部分 .... case UserAction.Play: if (player.PlayerState

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

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
....
它应该处理未处理的异常…但它没有

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

所以我的问题是:

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

  • 谢谢你的帮助

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

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

    Windows Phone提供了在中查找连接状态的方法,即类

    DeviceNetworkInformation.NetworkAvailabilityChanged+=新事件处理程序(NetworkChange);
    void NetworkChange(对象发送方,NetworkNotificationEventArgs e)
    {
    //网络已更改,禁用音频流并提醒用户
    }
    
    我用下面的代码来检查网络是否可用,点击“播放”按钮

    Application.Current.UnhandledException += AudioPlayer_UnhandledException;
    
    DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(NetworkChange);
    
    void NetworkChange(object sender, NetworkNotificationEventArgs e)
    {
        // Network changed, disable audio streaming and alert user
    }
    
    if (NetworkInterface.GetIsNetworkAvailable() == false)
    {
        // push some info to user...
    }