我在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文件相关联。每当我打开任何文件时,都不会立即播放。例如。
a.mp4
,它没有播放,我也没有关闭该应用。b.mp4
,它没有播放,我也没有关闭该应用。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();
}
有没有人知道为什么没有解决方法就无法正常工作?
答案 0 :(得分: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
在准备好之前需要发生什么。