BackgroundTask不在C#应用程序中触发

时间:2014-09-26 19:38:03

标签: c# windows-runtime windows-phone-8.1

我正在使用Windows Phone 8.1和C#。

通过关注Microsoft的MSDN示例(可从http://code.msdn.microsoft.com/windowsapps/BackgroundAudio-63bbc319获得)来创建音频播放器,我尝试将其集成到我的项目中。但是,虽然代码在Microsoft的示例中运行良好,但在将其集成到我的项目中后,它无法正常工作。

我复制并粘贴文件可能包含问题。 Constants.csApplicationSettingsHelper.csMyPlaylistManager.cs保持与示例相同(您可以点击上面的链接并点击"浏览代码"标签)。

当我运行以下项目时,它会抛出以下错误:"背景音频任务没有在预期的时间内启动"。如果我将bool result = SererInitialized.WaitOne(2000);代码块更改为StartBackgroundAudio()bool result = true;,它只会在控制台中打印"背景音频任务初始化"然后停止。

Page.xaml.cs

http://pastebin.com/L2zxzJKv

BackgroundAudio.cs

http://pastebin.com/zR6uzBf3

我不明白我做错了什么。我最终撤消了所有更改,只是使用项目中示例中完全相同的代码。我在appmanifest中添加了扩展名。

我创建了一个示例项目来帮助某人解决问题并回答这个问题。您可以在https://onedrive.live.com/redir?resid=ED2ED8732D8D457E!132&authkey=!AFBrZi5oI3k2zmU&ithint=file%2czip

找到它

1 个答案:

答案 0 :(得分:2)

您提供的ZIP文件在解决方案中只有一个项目。后台音频任务需要是解决方案中独立的 Windows运行时组件项目。请再次查看示例解决方案,确保已正确设置解决方案。

您的后台音频任务需要位于单独项目中的原因是因为所有后台任务都需要位于单独的项目中,后台任务将在与前台应用程序不同的进程中运行。这样,如果操作系统暂停或终止您的应用程序(即您切换到另一个应用程序),那么即使您的应用程序已被暂停,您的后台音频任务仍将继续运行并播放音频。然后,您需要通过在进程之间传递消息来在后台音频任务和前台进程之间进行通信(请参阅SendMessageToForegroundSendMessageToBackground)。

操作系统在后台运行时将始终暂停应用程序,因此您需要一个单独的轻量级后台任务进程,该进程具有在后台运行以播放音乐的特殊权限。

这些页面非常有助于解释所有概念: