1

我有这个App.xaml.cs

protected override void OnFileActivated(FileActivatedEventArgs args)
{
    Window.Current.Content = new Frame();
    ((Frame)Window.Current.Content).Navigate(typeof(MainPage), args);
    Window.Current.Activate();
}

这在MainPage.xaml.cs

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    FileActivatedEventArgs filesArgs = (FileActivatedEventArgs)e.Parameter;
    StorageFile file = (StorageFile)filesArgs.Files[0];
    mc.SetSource(await file.OpenReadAsync(), file.ContentType);
    mc.Play();
}

这在MainPage.xaml

<MediaElement x:Name="mc" />

现在,我面临一个非常奇怪的问题。我已将我的应用与 .MP4 文件相关联。每当我打开任何文件时,它都不会立即播放。例如。

  1. 我打开a.mp4,它没有播放,我没有关闭应用程序。
  2. 我打开b.mp4,它没有播放,我没有关闭应用程序。
  3. 然后,我打开a.mp4,它被播放。如果没有,我再试一次,它就会被播放。现在,如果我打开任何 MP4 文件,它会毫无问题地播放,直到我关闭应用程序。

因此,这种解决方法有时有效:

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    FileActivatedEventArgs filesArgs = (FileActivatedEventArgs)e.Parameter;
    StorageFile file = (StorageFile)filesArgs.Files[0];
    StorageFile file2 = (StorageFile)filesArgs.Files[0];
    mc.SetSource(await file2.OpenReadAsync(), file2.ContentType);
    mc.SetSource(await file2.OpenReadAsync(), file2.ContentType);
    mc.Play();
}

有谁知道为什么没有解决方法它不能工作?

4

1 回答 1

1

如果您在控件初始化和/或完全加载之前将源设置并开始播放,则文件看起来好像没有播放。这就是为什么它可以在应用程序已经加载时进行后续调用的原因,有时甚至在第一次调用时也是如此。我制作了一个简单的应用程序,并在大多数尝试中设法重现了您的问题(尽管有时它有效)。

我尝试了一个简单的解决方法,总是在开始播放之前等待MediaElement加载,似乎问题已经消失了 - 我无法在十几个电话中重现它。

这是我所做的:

MainPage.xaml:

<MediaElement x:Name="mc" Loaded="mc_Loaded" />

MainPage.xaml.cs

bool loaded = false;
Task task = new Task(() => {});

private void mc_Loaded(object sender, RoutedEventArgs e)
{
    loaded = true;
    task.Start();
}

protected override async void OnNavigatedTo(NavigationEventArgs e)
{
    FileActivatedEventArgs filesArgs = (FileActivatedEventArgs)e.Parameter;
    StorageFile file = (StorageFile)filesArgs.Files[0];
    if (!loaded)
        await task;
    mc.SetSource(await file.OpenReadAsync(), file.ContentType);
    mc.Play();
}

我真的不喜欢我的解决方案,因为它仅基于猜测和经验测试,但我找不到任何文档说明MediaElement在它准备好之前需要发生什么。

于 2012-10-20T19:10:55.483 回答