0

我目前使用AudioPlaybackAgent播放在線音頻流(mp3)。如果設備連接到互聯網音頻正在播放。但是,在沒有網絡連接,並且我按在我的應用程序的play按鈕,崩潰,並AudioPlaybackAgent在網絡不可用時崩潰

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在音頻播放器中捕獲這個異常,但是我無法使用MessageBox正確地從audioplaybackagent顯示它(因爲如果您嘗試提交應用程序以便MS不允許它)。

所以在這裏我的問題是:

  1. 我如何能捕捉例外我的應用程序內,然後顯示例如MessageBox的用戶說,沒有網絡連接
  2. 爲什麼未處理的異常沒有處理通過一段代碼發佈?

感謝您的幫助!

回答

0

我用下面的代碼來檢查網絡是否可以用敲擊想通了「播放」按鈕

if (NetworkInterface.GetIsNetworkAvailable() == false) 
{ 
    // push some info to user... 
} 
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 
} 
+0

+1您的文章使我的解決方案,謝謝! – Majky