c# – 在SaveState / LoadState之后无法设置MediaElement Source
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 在SaveState / LoadState之后无法设置MediaElement Source,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2154字,纯文字阅读大概需要4分钟。
内容图文
![c# – 在SaveState / LoadState之后无法设置MediaElement Source](/upload/InfoBanner/zyjiaocheng/786/151137d8a7ec423dbde51c8698467120.jpg)
(注意:所有代码都已严格简化.)
问题
挂起/恢复后未设置MediaElement源.设置源后,CurrentState会快速更改为“已关闭”.
我正在处理MediaFailed事件 – 它不会触发.我也在处理MediaOpened事件,它也不会触发.
细节
我有以下方法更新MediaElement的Source.只要应用程序在被暂停后没有尝试恢复,它就能很好地工作.
private async void UpdateMediaElementSource(object sender, EventArgs e)
{
var videoSource = this.DefaultViewModel.CurrentSource; // a string
var file = await StorageFile.GetFileFromPathAsync(videoSource);
var videoStream = await file.OpenAsync(FileAccessMode.Read);
this.videoMediaElement.SetSource(videoStream, file.ContentType);
// The above line works many times as long as the app is not trying to Resume.
}
当应用程序处于暂停状态时,它会调用SaveState方法:
protected async override void SaveState(Dictionary<String, Object> pageState)
{
pageState["MediaElementSource"] = this.DefaultViewModel.CurrentSource;
// I also made the videoStream global so I can dispose it — but no dice.
this.videoStream.Dispose();
this.videoStream = null;
}
当应用程序恢复时,它会调用LoadState方法:
protected async override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
string source = string.Empty;
if (pageState != null)
{
if (pageState.ContainsKey("MediaElementSource"))
{
source = (string)pageState["MediaElementSource"];
}
}
var document = PublicationService.GetDocument(this.currentDocumentIdNumber);
this.DefaultViewModel = new DocumentViewModel(document);
this.DefaultViewModel.CurrentMarkerSourceChanged += UpdateMediaElementSource;
if (!string.IsNullOrEmpty(source))
{
// This causes the UpdateMediaElementSource() method to run.
this.DefaultViewModel.CurrentSource = source;
}
}
我感谢你对这个问题的任何帮助.如果您需要更多详细信息,请与我们联系.
解决方法:
因此,事实证明mediaElement的Source在被添加到可视化树之前被设置了.
通常,这样做不是问题:
mediaElement.Source = whatever;
但是这样做是一个问题:
mediaElement.SetSource(stream, MimeType);
结论
调用SetSource(…)时,请确保您的MediaElement是VisualTree的一部分.
让我的上述代码工作的一种简单方法是添加一个全局bool,一旦mediaElement.Loaded事件被触发,该bool设置为true.然后,在调用SetSource()的代码中,将其包装在if(_mediaElementLoaded)块中.
内容总结
以上是互联网集市为您收集整理的c# – 在SaveState / LoadState之后无法设置MediaElement Source全部内容,希望文章能够帮你解决c# – 在SaveState / LoadState之后无法设置MediaElement Source所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。