C# 当应用程序关闭时继续播放音乐

C# 当应用程序关闭时继续播放音乐,c#,windows-phone-7,backgroundworker,mediaelement,C#,Windows Phone 7,Backgroundworker,Mediaelement,我正在wp7中开发一个应用程序 我启动了一个mediaelement,从独立的存储中播放我的音乐文件,具有可用的功能(播放、暂停、下一步、上一步、搜索),一切都很完美 现在,当mediaelement已经开始播放时,我想让应用程序在用户退出或页面卸载或类似的情况下继续播放 注意在abobe中尝试 list.playlist: is a list with audiotracks num_input: is the number of music file in list that will pl

我正在wp7中开发一个应用程序

我启动了一个mediaelement,从独立的存储中播放我的音乐文件,具有可用的功能(播放、暂停、下一步、上一步、搜索),一切都很完美

现在,当mediaelement已经开始播放时,我想让应用程序在用户退出或页面卸载或类似的情况下继续播放

注意在abobe中尝试

list.playlist: is a list with audiotracks num_input: is the number of music file in list that will play, (get: from mediaelement) time_input: is the timespan from mediaelement before stop, (set: backgroundaudioplayer to start) play: is boolean variable, true if mediaelement plays Stop(): is function that stops mediaelement from playing 问题是当应用程序页面卸载时(不是在用户退出时,第一个问题) backgroundaudioplayer获得名称、启用的控件和所有人员,但即使我按下播放按钮,它也不会播放(因此按钮不工作,第二个问题)

我还想控制我的应用程序列表旁边的播放器(上一个,下一个,播放,暂停),即使应用程序关闭

所有的歌曲都位于孤立的数据库中,我在数据库中有歌曲名和文件名。音轨看起来像:

AudioTrack audiotrack1 = new AudioTrack(new Uri(emp.EmployeeFile + ".mp3", UriKind.Relative), emp.EmployeeName, null, null, null, null, EnabledPlayerControls.All);

谢谢

实现后台音频需要更多的工作。有关演练,请参阅本文:


注意,代理位于另一个进程中,我不确定SqlCe是否支持从不同进程并发访问同一数据库。在我看来,与后台代理通信的最佳方式是由命名的
System.Threading.Mutex

保护的独立存储文件(例如播放列表),请记住,代理将歌曲播放列表作为变量,而不是像您所说的从数据库中获取!计划(数据库->静态变量列表->代理),我已经看过这个文档,但我不想通过应用程序控制代理,而是在应用程序关闭时通过代理程序控制列表!我的计划是数据库->列表(GUI进程)->独立存储文件->静态列表(代理进程)->后台音频播放器。请记住,操作系统有时会终止您的GUI进程(例如,当用户按后退按钮足够多次时,或由于墓碑效应),而代理进程将快乐地生活,播放您的音乐,并响应universal volume control的“下一次暂停上一次播放”按钮。这就是为什么你需要在后台处理你的播放列表。我明白了,我也想让你知道,我没有任何例外的音乐文件存在或类似的东西!那么如何在代理进程中设置播放列表呢?当您的用户在GUI进程中按“播放”时,您将播放列表保存到独立的存储中,并调用
BackgroundAudioPlayer.Instance.play()。在后台代理过程中,当您收到播放命令时,您将从独立存储器加载播放列表,构建AudioTrack obect并播放它。我建议您遵循我链接到的MSDN指南,以熟悉整个背景音频体系结构-这并不是那么简单,需要一些努力才能正确实施:-(好的,我做了一个函数,将我播放列表中的每个音轨的源代码和标题以txt格式保存在独立文件中。然后我添加了你链接到我的项目中的代理(以及引用中的dll)然后我做了一个函数,在代理中加载txt,创建音频曲目的播放列表!但它没有播放!我的事情不是加载代理!
AudioTrack audiotrack1 = new AudioTrack(new Uri(emp.EmployeeFile + ".mp3", UriKind.Relative), emp.EmployeeName, null, null, null, null, EnabledPlayerControls.All);