C# ';MediaElement.CurrentState';正在更改为';关闭';不知什么原因

C# ';MediaElement.CurrentState';正在更改为';关闭';不知什么原因,c#,winrt-xaml,mediaelement,C#,Winrt Xaml,Mediaelement,我的程序应该在用户点击“播放”按钮时播放视频。然而,第一次点击“播放”就没有任何作用 代码非常简单,它只需在我的MediaElement、VideoPlayer上调用“SetSource”,然后播放: private async void playVideo_Tapped(object sender, TappedRoutedEventArgs e) { await setUpVideo(); VideoPlayer.Play(); } 我已经浏览了“setUpVideo()”

我的程序应该在用户点击“播放”按钮时播放视频。然而,第一次点击“播放”就没有任何作用

代码非常简单,它只需在我的MediaElement、VideoPlayer上调用“SetSource”,然后播放:

private async void playVideo_Tapped(object sender, TappedRoutedEventArgs e)
{
    await setUpVideo();
    VideoPlayer.Play();
}
我已经浏览了“setUpVideo()”很多次,那里的一切都正常工作,它只在确保文件存在后调用“VideoPlayer.SetSource()”。直到我加入了一种监控“VideoPlayer.CurrentState”状态的方法,我才意识到这个问题:

public VideoViewer()
{
    this.InitializeComponent();
    VideoPlayer.CurrentStateChanged += VideoPlayer_CurrentStateChanged;
}

void VideoPlayer_CurrentStateChanged(object sender, RoutedEventArgs e)
{
    var foo = VideoPlayer.CurrentState;
}

如果我在代码运行时检查'foo'的值,我会看到在第一次轻触(并且仅在第一次轻触时)'VideoPlayer.CurrentState'在'playVideo_Tapped()'完成后变为'Opening',然后变回'Closed'!此后的每一次轻触都将遵循从“打开”到“播放”再到“暂停”的正确顺序,但第一次轻触始终关闭。这是为什么??

看起来问题毕竟出在“setUpVideo()”中。呜呜声

简短版本,通过更改“setUpVideo()”中的一段代码,可以解决此问题:

using (IRandomAccessStream fileStream = await videoFile.OpenAsync(FileAccessMode.Read))
{
  VideoPlayer.SetSource(fileStream, videoFile.ContentType);
}
……为此:

IRandomAccessStream fileStream = await videoFile.OpenAsync(FileAccessMode.Read);
VideoPlayer.SetSource(fileStream, videoFile.ContentType);
更长的版本,我的代码失败,因为出现错误“mf_media_engine_err_src_not_supported hresult-0xc00d36c4”,它关闭了我的MediaElement而不是播放它。发生这种情况是因为当我离开“使用”代码块时,“Irand OffStaveStudio”将在我读取文件的中间关闭。我不是100%清楚为什么在第一次运行代码后它就完成了整个过程,但至少现在它可以可靠地工作了


我还必须在该评分的地方评分,我在这里找到了答案:

看来问题毕竟出在“setUpVideo()”中。呜呜声

简短版本,通过更改“setUpVideo()”中的一段代码,可以解决此问题:

using (IRandomAccessStream fileStream = await videoFile.OpenAsync(FileAccessMode.Read))
{
  VideoPlayer.SetSource(fileStream, videoFile.ContentType);
}
……为此:

IRandomAccessStream fileStream = await videoFile.OpenAsync(FileAccessMode.Read);
VideoPlayer.SetSource(fileStream, videoFile.ContentType);
更长的版本,我的代码失败,因为出现错误“mf_media_engine_err_src_not_supported hresult-0xc00d36c4”,它关闭了我的MediaElement而不是播放它。发生这种情况是因为当我离开“使用”代码块时,“Irand OffStaveStudio”将在我读取文件的中间关闭。我不是100%清楚为什么在第一次运行代码后它就完成了整个过程,但至少现在它可以可靠地工作了

我还必须在应该得到表扬的地方给予表扬,我在这里找到了这个答案: