导致BackgroundAudioPlayer.get_Position()处出现System.Runtime.Inte

本文关键字:System Runtime Inte get BackgroundAudioPlayer Position 导致 | 更新日期: 2023-09-27 18:21:40

有时我在试图获取BackgroundAudioPlayer.Instance的位置时会遇到异常。这种情况很少发生,但我已经能够获得StackTrace。奇怪的是,这个代码是在播放曲目时每秒执行一次的。这个错误的原因可能是什么?

我得到这个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;
    }
}

导致BackgroundAudioPlayer.get_Position()处出现System.Runtime.Inte

该代码链接到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;
}
相关文章: