2013-07-09 1 views
2

때때로 BackgroundAudioPlayer.Instance의 위치를 ​​가져올 때 예외가 발생합니다. 매우 드물게 발생하지만 StackTrace를 얻을 수있었습니다. 이상하게도,이 코드는 트랙을 재생하는 동안 매초마다 실행됩니다. 이 오류의 원인은 무엇입니까?BackgroundAudioPlayer.get_Position()에서 System.Runtime.InteropServices.COMException이 발생하는 이유는 무엇입니까?

이 StackTrace가 표시됩니다.

System.SystemException: HRESULT = 0xC00D36C4 ---> System.Runtime.InteropServices.COMException: Exception from HRESULT: 0xC00D36C4 at 
Microsoft.Phone.BackgroundAudio.Interop.IAudioPlaybackManager.get_CurrentPosition() at 
Microsoft.Phone.BackgroundAudio.BackgroundAudioPlayer.get_Position() --- End of inner exception stack trace --- at 
Microsoft.Phone.BackgroundAudio.BackgroundAudioPlayer.get_Position() at 
MC.PodCast.Common.ViewModel.PlayerViewModel.UpdateTrackPosition() at 
MC.PodCast.Common.ViewModel.PlayerViewModel.ReactToBackgroundAudioPlayer() at 
MC.PodCast.Common.ViewModel.PlayerViewModel.Initialize() at 
MC.PodCast.Common.ViewModel.PlayerViewModel.<<get_InitializeCommand>b__5>d__6.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__0(Object state) 

물론 내가 사용하고있는 코드는 단순합니다.

public void UpdateTrackPosition() 
{ 
    if (_backgroundAudioPlayer != null && _backgroundAudioPlayer.Track != null) 
    { 
     Position = _backgroundAudioPlayer.Position; 
    } 
    else 
    { 
     Position = null; 
    } 
} 
+0

. 시도하십시오 { 위치 = _backgroundAudioPlayer.Position; } catch (SystemException e) { Debugger.Break(); // 이상한 상황이 때때로 Position 호출로 인해 System.Runtime.InteropServices.COMException이 발생합니다. } –

답변

3

그 코드는 MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED에 연결되어 있습니다하지만 난 당신이 소리를 할 같은데요.

BackgroundAudioPlyer가 매우 이상 할 수 있음을 발견했습니다. 나는 대부분의 전화를 "안전"확장 방법으로 포장합니다.

예 지금은 시도 캐치 제비로 전화를 포장하고있어 들어

public static PlayState PlayerStateSafe(this BackgroundAudioPlayer source) 
{ 
    PlayState state; 
    try 
    { 
     state = source.PlayerState; 
    } 
    catch (InvalidOperationException) 
    { 
     state = PlayState.Unknown; 
    } 
    return state; 

} 
+0

감사합니다. Shawn. 모든 것을 포장하기 시작할 때입니다. 이상한 일이 일어날 수 있습니다. –

+1

동의, 배경 오디오 작업은 까다 롭습니다. 그러나 일단 그것이 작동하면 그것은 굉장합니다. –

관련 문제