无法使用 Windows Phone 后台任务进行异步调用
Posted
技术标签:
【中文标题】无法使用 Windows Phone 后台任务进行异步调用【英文标题】:Unable to make asynchronous call using Windows Phone Background Task 【发布时间】:2016-08-12 07:50:49 【问题描述】:我的 Windows Phone Silverlight 8.1 应用程序有一个后台任务。
后台任务运行良好,但是当我将调用异步方法放入其中时,它只是在此阶段冻结。使用调试器,它就停止了。我无法单步执行代码或任何内容。
下面是我的代码:
public sealed class bgTask : IBackgroundTask
public async void Run(IBackgroundTaskInstance taskInstance)
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
DateTime timeNow = DateTime.Now;
TimeSpan minus28 = new TimeSpan(0, 28, 0);
DateTime timeGone = timeNow.Subtract(minus28);
int resultsCount = await GetCount();
ToastTemplateType toastTemplate = ToastTemplateType.ToastText02;
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
XmlNodeList textElements = toastXml.GetElementsByTagName("text");
textElements[0].AppendChild(toastXml.CreateTextNode("New Pictures!"));
textElements[1].AppendChild(toastXml.CreateTextNode(resultsCount + " new images in your area"));
ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml));
_deferral.Complete();
private async Task<int> GetCount()
string page = "http://en.wikipedia.org/";
// ... Use HttpClient.
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(page))
using (HttpContent content = response.Content)
// ... Read the string.
string result = await content.ReadAsStringAsync();
// ... Display the result.
if (result != null &&
result.Length >= 50)
//resultsCount = 1888;
return 9999;
在调试时,它将进入 GetCount() 方法,然后在 await GetCount() 部分停止。
几天来一直在尝试解决这个问题。非常感谢您的帮助。 :)
【问题讨论】:
见github.com/Microsoft/Windows-universal-samples/tree/master/… 他们有很好的例子说明你正在尝试做什么。除了您的自定义设置之外,我看到的唯一区别是它们始终在类范围级别而不是在 Run 内部定义BackgroundTaskDeferral
。
【参考方案1】:
您需要在类范围内定义延迟。这是因为在创建和启动后台任务时会请求延迟。
public sealed class bgTask : IBackgroundTask
BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();
public async void Run(IBackgroundTaskInstance taskInstance)
//Handle async stuff
_deferral.Complete();
更多信息可以在这里找到:https://msdn.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task
【讨论】:
@user3102785 如果我的回答解决了您的问题。请将问题标记为已回答。以上是关于无法使用 Windows Phone 后台任务进行异步调用的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Windows Phone 8.1 中使用后台任务(需要 ID_CAP_NETWORKING,但它包含在清单中)
在 Windows Phone 8.1 中从后台任务启动应用程序
在 Windows 10 移动版上运行的 Windows Phone 8.1 应用程序的后台计时器任务中没有网络